2

我有一个 crontab 脚本,它由 run-parts 每 10 分钟执行一次

sudo -u www php -f /path/to/parser.php crawl_content1 >> /tmp/job_1.log 2>&1 &
sudo -u www php -f /path/to/parser.php crawl_content2 >> /tmp/job_2.log 2>&1 &

我的 parser.php 包含以下代码

$max_execute_time = time() + 9*60;
while(true)
{
   //... do something ...
   if(time() >= $max_execute_time)
   {
       echo "time out!";
       exit;
   }
}

我的问题是退出部分。退出后,脚本仍以 10% 的 CPU 和 25% 的内存 (512MB) 运行。在我将出口更改为中断后,问题解决了。

有谁知道这有什么问题?谢谢

4

1 回答 1

0

这是一个切线的响应,但我觉得奇怪的是你实现了自己的最大执行计时器,而 PHP至少有三种方法可以为你做这件事(节省你在脚本中自己计算的麻烦和 CPU 周期):

sudo -u www php -d max_execution_time=30s -f /path/to/parser.php crawl_content1 >> /tmp/job_1.log 2>&1 &

或者,在脚本的顶部:

ini_set('max_execution_time', 30);

或同等学历):

set_time_limit(30);

(您也可以修改php.ini,但可以理解的是,您可能不想这样做。)

我只建议这样做,因为您的实现会终止您的整个脚本;在其他情况下,循环的执行时间可能会在不终止脚本的情况下受到合法限制。

于 2012-10-12T15:20:24.610 回答