Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在CLI模式下退出PHP脚本()_Php - Fatal编程技术网

无法在CLI模式下退出PHP脚本()

无法在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_

我有一个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_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