从DB获取动态名称列表,并创建一个遍历该数组(php)的cron作业


Get a list of dynamic names from a DB and have a cron job that traverses this array (php)

这是我试图在高级伪代码中完成的:

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秒上)。我的虚拟主机然后做了一个改变,使脚本将在70秒后超时(可以理解)。这完全破坏了我的脚本。

我假设我需要使用cronjobs或命令行来完成此操作。我只懂cronjobs的基本用法。关于如何在cronjob中拆分这项工作,有什么高层次的建议吗?我不确定cronjob如何解析动态列表。

cron本身不知道您的列表和已经完成的操作,但是您可以使用两种cron-job。

第一个cron-job—例如每天运行一次—可以将您的100项添加到作业队列中。

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

请注意,在这种情况下,两个cron-job都只是启动php脚本的触发器,并且您有两个不同的脚本,一个用于设置队列,一个用于处理队列的一部分,因此几乎所有操作都是在php中完成的。

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

因为这是一个不同于http的环境,有些东西显然不能工作。会话、cookie、get和post变量。输出被发送到stdout而不是浏览器。

您可以使用$argv向脚本传递参数