在CLI模式下,PHP脚本不能是exit()

时间:2012-10-12 14:45:32

标签: php

我有一个crontab脚本,每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)运行。 在我改变退出后,问题解决了。

有没有人知道这有什么问题? 感谢

1 个答案:

答案 0 :(得分: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,但您可能不希望这样做。)

我只是建议这样做,因为您的实现会终止您的整个脚本;还有其他一些实例可以在不终止脚本的情况下合理限制循环的执行时间。