我在一个PHP文件中有这个:
echo shell_exec('nohup /usr/bin/php -f '.CRON_DIRECTORY.'testjob.php > /dev/null 2>&1 &');
在testjob.php中我有:
file_put_contents('test.txt',time()); exit;
这一切都只是花花公子。但是,如果我进入流程,它就不会在运行后终止testjob.php。
答案 0 :(得分:1)
(由于stackoverflow 仍然不得不发布评论而不得发布此答案而不是评论...)
适合我。我完全按照描述制作了testjob.php,另一个文件test.php只有给定的行(除了我删除了CRON_DIRECTORY,因为testjob.php和我在同一个目录中)。
为了确保我测量正确,我在testjob.php的顶部添加了“sleep(5)”,在另一个窗口中我有:
watch 'ps a |grep php'
运行。发生这种情况:
我想知道shell是否重要,所以我从bash切换到了sh。结果相同。
我也想知道是否可能因为你的外部脚本长时间运行。所以我把“sleep(10)”放在test.php的底部。相同的结果(即testjob.php在5秒后结束,test.php在5秒后结束)。
所以,无益,你的问题不是你发布的代码。
答案 1 :(得分:0)
您正在执行PHP并将该执行作为后台任务。这意味着它将在后台中运行,直到完成。 shell_exec
不会杀死这个过程或类似的东西。
您可能希望设置执行限制PHP cli has a setting of unlimited by default。另见set_time_limit
PHP Manual;
因此,如果你想知道为什么php进程没有终止,你需要调试脚本。如果这太复杂并且您无法找到脚本运行那么长的原因,您可能只想在一段时间后终止该过程,例如1分钟。
答案 2 :(得分:0)
从命令末尾删除&
。此符号表示nohup
继续在后台运行,因此shell_exec
正在等待任务完成......并等待......等待......直到时间结束;)
我甚至不知道为什么要用nohup
执行此命令。
echo shell_exec('/usr/bin/php -f '.CRON_DIRECTORY.'testjob.php > /dev/null 2>&1');
应该足够了。