长时间运行的PHP脚本挂起

我有这个设置在我的PHP脚本,以使其运行,只要它需要parsing和执行MySQL查询和超过100,000行的图像。

ignore_user_abort(true); set_time_limit(0); #begin logging output error_reporting(E_ALL); ini_set('memory_limit', '512M'); 

我在shell中像这样运行这个命令:

 nohup php myscript.php > output.txt 

运行了大约8到10个小时之后,这个脚本仍然会运行,但执行只是停止…没有更多的输出..这不是一个僵尸进程我检查顶部。 它还没有达到内存限制,如果它不会退出?

到底是怎么回事? 保pipe这个脚本和编写自定义代码来推动它是一个真正的痛苦。 到底是怎么回事? 我读了unix也许清理僵尸,但它不是一个僵尸。 我知道这不是PHP的设置..它不是通过一个networking服务器运行它只是从命令行所以给。

长时间运行的PHP脚本不应该无故死亡或挂起。 我已经有了连续运行6个月的脚本。 脚本内部必须有其他的东西。

看起来你没有正确分离你的过程。 目前,如果你的进程的父母死亡,你的进程也将死亡。 如果你把你的进程放在后台(创建一个真正的守护进程),你将不会遇到scuh麻烦。

你可以用这种方式执行你的PHP来真正地分离它:

 php myscript.php > output.txt 2>&1 & 

供你参考 :

 > output.txt 

将标准输出(即你的回声,打印等)重定向到output.txt文件

 2>&1 

会将错误输出重定向到标准输出,并将其写入相同的output.txt文件中

 & 

是你的情况中最重要的事情:它将分离你的进程来创建一个真正的守护进程。

编辑:如果你在破解你的shell的时候遇到了麻烦,最简单的方法是把你的脚本放在一个bash脚本上,比如run.sh

 #!/bin/bash php myscript.php > output.txt 2>&1 & 

你可以这样运行你的脚本:

 bash run.sh & 

在这种情况下,你的shell会“认为”你的程序已经在shell脚本的末尾结束了,而不是在php守护进程的结尾。

我还不能评论,但是,也许你的过程正在消耗100%的CPU,我有一个while循环的问题,没有while循环结束时调用sleep()usleep()