Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从数据库中获取动态名称列表,并拥有一个遍历此数组的cron作业(php)_Php_Cron_Wait - Fatal编程技术网

从数据库中获取动态名称列表,并拥有一个遍历此数组的cron作业(php)

从数据库中获取动态名称列表,并拥有一个遍历此数组的cron作业(php),php,cron,wait,Php,Cron,Wait,以下是我试图在高级伪代码中实现的目标: query db for a list of names (~100) for each name (using php) { query a 3rd party site for xml based on the name parse/trim the data received update my db with this data Wait 15 seconds (the 3rd party site has rest

以下是我试图在高级伪代码中实现的目标:

query db for a list of names (~100)
for each name (using php) {
    query a 3rd party site for xml based on the name
    parse/trim the data received
    update my db with this data
    Wait 15 seconds (the 3rd party site has restrictions and I can only make 4 queries / minute)
}
所以这一切都很顺利。整个脚本耗时约25分钟(99%的时间是在每次迭代后等待15秒)。然后,我的web主机进行了更改,使脚本在70秒后超时(可以理解)。这完全打破了我的剧本


我假设我需要使用cronjobs或命令行来完成这项工作。我只了解克朗·乔布斯的基本情况。关于如何在cronjob中拆分此工作,有什么高级建议吗?我不确定cronjob如何通过动态列表进行解析。

cron本身不知道您的列表以及已经完成的工作,但您可以使用两种cron作业

第一个cron作业(例如每天运行一次)可以将100个项目添加到作业队列中

第二个cron作业(例如,在特定时间段内每分钟运行一次)可以检查队列中是否有项目,执行一个(或几个)并将其从队列中删除


请注意,在本例中,两个cron作业都只是启动php脚本的触发器,您有两个不同的脚本,一个用于设置队列,另一个用于处理队列的一部分,因此几乎所有操作都是在php中完成的。

简言之,没有什么不同。您将通过命令行
php/path/to/script.php
执行脚本,而不是通过modphp或fcgi执行脚本

因为这是一个与http不同的环境,所以有些东西显然不起作用。会话、cookies、get和post变量。输出被发送到标准输出,而不是浏览器


您可以使用
$argv

将参数传递给脚本,我认为这对我的情况是有意义的。今晚我会试试。我理解这个理论,如果能像这样实现自动化就好了。我缺少的部分是2个cron作业如何能够访问共享数据。我需要另一个db表来存储这个队列,还是有更简单的方法?@johnpecan我个人会使用数据库,但我想你可以使用文件。只是两个不同的php脚本连接到同一个队列/数据库/文件进行处理。您可以使用cron来运行它们,而不是使用浏览器。