PHP CLI脚本没有超时

时间:2011-06-20 09:04:24

标签: php linux command-line-interface

我们有一个节点js脚本,它运行一个命令来执行以下命令:

/usr/local/bin/php -q /home/www/441.php {"id":"325241"}

这个脚本做了很多事情,但它似乎不尊重时间限制。该文件的第一行是:

set_time_limit(1800);

然而,如果我们检查服务器上运行的进程(ps -aux | grep php),我们会看到很多这些命令自上周以来一直在打开。

关于我们如何清理它的任何想法?

3 个答案:

答案 0 :(得分:2)

我在max_execution_time的PHP用户指南中找到了以下注释

  

请记住,对于CLI SAPI   max_execution_time硬编码为0。   所以它似乎被ini_set改变了   或set_time_limit但不是,   其实。我唯一的参考   发现这个奇怪的决定是   在bugtracker深处   (http://bugs.php.net/37306)和   php.ini(征求意见   'max_execution_time'指令)。

因此,似乎CLI模块中存在一个错误,意味着有效地忽略了max_execution_time。

评论者在http://bugs.php.net/37306中提到了错误跟踪器中有关此内容的页面,但跟踪器似乎已关闭。

答案 1 :(得分:1)

set_time_limit只对程序的php部分有意义。如果您对数据库的查询需要5小时才能完成,那么这些5h不会被php计算,因此它们不属于set_time_limit限制的范围。话虽如此,如果一个php进程在一周之后仍在运行,如果它没有调用另一个永远运行的程序(在这种情况下,set_time_limit不会影响该调用),这似乎很奇怪。

此外,-q标志是什么?我无法在man phpphp --helpphp's command line options找到它。

答案 2 :(得分:0)

如果你在nodejs中启动脚本,为什么不在19世纪后杀死它呢?

var pid = startPHPProcess();

setTimeout(function() {
    killPHPProcess(pid);
}, 1800);