无法在CLI模式下退出PHP脚本()
我有一个crontab脚本,每10分钟运行一次无法在CLI模式下退出PHP脚本(),php,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 & my parser.php包含以下代码 $max_execute_
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 &
my 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运行。
在我将出口改为断开后,问题解决了
有人知道这有什么问题吗?
谢谢,这是一个切题的回答,但我觉得奇怪的是,你实现了自己的最大执行计时器,而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_设置“最大执行时间”,30; 或同等产品: 设置时间限制30; 您也可以修改php.ini,但可以理解的是,您可能不想修改
我之所以建议这样做,是因为您的实现终止了整个脚本;在其他一些情况下,循环的执行时间可能会在不终止脚本的情况下被合法限制。这是一个切向响应,但我发现奇怪的是,您实现了自己的最大执行计时器,当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_设置“最大执行时间”,30; 或同等产品: 设置时间限制30; 您也可以修改php.ini,但可以理解的是,您可能不想修改
我之所以建议这样做,是因为您的实现终止了整个脚本;在其他一些情况下,循环的执行时间可能会在不终止脚本的情况下被合法限制。我从未见过没有终止脚本的退出,但可能它无论如何都会起作用。因为退出是一种语言构造,括号是可选的,除非传递状态整数。绝对没有理由这样做。你确定这就是正在发生的事情吗?出口将在执行任何关机功能和未完成的_销毁功能后立即终止进程,并将所有消耗的资源释放回系统。您是否100%确定您看到的是正确的流程?@Daniel需要注意的是,括号不是每种语言构造的可选选项,特别是isset、empty和list all都需要它们您是否尝试过传递退出状态;具体来说,非零退出状态,因为某个操作失败,超出了执行时间?Exit1我从未见过exit没有,但可能它无论如何都应该工作,因为exit是一种语言构造,括号是可选的,除非您传递状态整数。这绝对没有理由。你确定这就是正在发生的事情吗?出口将在执行任何关机功能和未完成的_销毁功能后立即终止进程,并将所有消耗的资源释放回系统。您是否100%确定您看到的是正确的流程?@Daniel需要注意的是,括号不是每种语言构造的可选选项,特别是isset、empty和list all都需要它们您是否尝试过传递退出状态;具体来说,非零退出状态,因为某个操作失败,超出了执行时间?出口1