从数据库中获取动态名称列表,并拥有一个遍历此数组的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来运行它们,而不是使用浏览器。