Cron是一个需要页面刷新的PHP循环

时间:2018-03-30 22:57:05

标签: php

我有一个PHP抓取工具,每天从crontab激活几次

php crawler.php

crawler.php中,我查询我的网站的数据库,然后循环并检查它们:

foreach ($mysql_results as .. ) {
    // curl and check html for my checks
    // each site takes about 30sec
}

我已经开始更改逻辑了,而不是每个php执行一个站点,完成,然后重新激活脚本并运行下一个站点

// get offset from database
// based on offset get single site from database
// curl and check html for my checks
// increase offset by one
// close database
// run this page again until no more sites are left
shell_exec('php '.__FILE__);

一切都很好,当然,直到最后一行。 shell_exec等待执行完成..如果我没有弄错,我的php文件不是作为兄弟进程独立发射 - 它只是堆叠在自身内,这正是我想要摆脱的。

无论如何在php中,启动php cli进程 - 无需等待?或者我的逻辑是完全关闭的?

2 个答案:

答案 0 :(得分:1)

您可以使用pcntl_exec(),这是POSIX execve()系统调用的PHP等价物。它用新程序取代了当前的流程。

pcntl_exec("/usr/bin/php", ["php", __FILE__]);

答案 1 :(得分:1)

你是对的,它是同步执行脚本的。

相反,更好的方法是让cron每分钟运行一次脚本,然后让脚本更新数据库中特定网站的“最后爬网日期”。

这样,每个新脚本运行应该只选择具有最早“最后一次抓取日期”的网站并进行处理。

这样,每个脚本运行都是完全独立的,你可以并行运行多个php进程。

干杯。