我在我的PHP脚本中有此集合,以使其可以运行,只要它需要解析并执行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个小时后,此脚本仍将运行,但执行仅停止...不再输出..这不是我检查过顶部的僵尸进程。它也没有达到内存限制,如果这样做会不会退出?
发生了什么事?照顾这个脚本并编写自定义代码以推动它是一个真正的痛苦。到底是怎么回事?我在Unix上阅读了僵尸,但这不是僵尸。我知道它不是PHP设置..并且它不是通过Web服务器运行的,它仅来自命令行,所以给出了什么。
看起来您似乎还没有正确地分离过程。目前,如果您的过程的父母死亡,您的过程也会死亡。如果将过程放置在后台(创建一个真正的守护程序),则不会遇到SCUH麻烦。
您可以以这种方式执行PHP来真正分离它:
php myscript.php > output.txt 2>&1 &
以获取您的信息:
> output.txt
将将标准输出(即您的回声,打印等)重定向。TXT文件
2>&1
会将错误输出重定向到标准输出,并将其写入同一输出。txt文件
&
在您的情况下是最重要的事情:它将分离您创建真正的守护程序的过程。
编辑:如果您在断开外壳时遇到麻烦,最简单的是将脚本放在bash脚本上,例如 run.sh
:
#!/bin/bash
php myscript.php > output.txt 2>&1 &
您将以这种方式运行脚本:
bash run.sh &
在这种情况下,您的外壳将"思考"您的程序在外壳脚本的末尾结束,而不是在PHP守护程序的末尾。
长期运行的PHP脚本不应无缘无故地死亡或挂起。我的脚本连续运行了6个月 。您的脚本主体内部一定有其他事情。