我们有一个节点js脚本,它运行一个命令来执行以下命令:
/usr/local/bin/php -q /home/www/441.php {"id":"325241"}
这个脚本做了很多事情,但它似乎不尊重时间限制。该文件的第一行是:
set_time_limit(1800);
然而,如果我们检查服务器上运行的进程(ps -aux | grep php
),我们会看到很多这些命令自上周以来一直在打开。
关于我们如何清理它的任何想法?
答案 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 php
或php --help
或php's command line options找到它。
答案 2 :(得分:0)
如果你在nodejs中启动脚本,为什么不在19世纪后杀死它呢?
var pid = startPHPProcess();
setTimeout(function() {
killPHPProcess(pid);
}, 1800);