从命令行运行PHP脚本作为后台进程
我试图通过Linux中的命令行在后台连续运行PHP脚本。我已经尝试了命令php filename.php &
,但似乎脚本执行非常快,而它应该保持运行,直到进程终止。从命令行运行PHP脚本作为后台进程
有什么建议吗?
确定的脚本不包含任何错误?这通常会使“执行非常快地终止”。 首先,在你的脚本来显示它可能有任何错误的顶部追加error_reporting(E_ALL); ini_set('display_errors', 1);
,那么你可以使用:
nohup php filename.php &
nohup的运行,即使会话是断开的命令或用户 日志出。
OR
nohup php filename.php >/dev/null 2>&1 &
同上,但不创建
nohup.out
文件。
您还可以使用:ignore_user_abort(1);
设置一个客户端断开连接是否应该中止脚本执行
set_time_limit(0);
限制了最大脚本执行时间,在这种情况下,它会运行,直到 过程完成或Apache进程重新启动。
注释
的php
和filename.php
路径可以被提供为全路径,代替php
和filename.php
,可以使用/usr/bin/php
和/full/path/to/filename.php
。
完整路径建议避免找不到文件错误。
nohup /path/to/command-name arg1 arg2 &
其中:command-name
:shell脚本或者命令的名字命名。您可以将参数传递给命令或shell脚本。&
:nohup不会自动把它在后台运行的命令;你必须明确地做到这一点,通过以&符号结束命令行。
重复[answer](http://*.com/a/6989340/6209665)。然后使用[code formatting](https://meta.stackexchange.com/que请参阅/ 22186/how-do-i-format-my-code-blocks)。 – Andrew
nohup php file.php > /dev/null 2>&1 &
像这样的命令中的大写字母(>
)将程序的输出重定向到某处。在这种情况下,东西被重定向到/dev/null
,和东西被重定向到&1
标准,输出和错误
有输入和输出的一个程序三个标准的来源。标准输入通常来自键盘,如果它是交互式程序,或者来自其他程序(如果它正在处理其他程序的输出)。该程序通常打印到标准输出,有时打印到标准错误。这三个文件描述符(您可以将它们视为“数据管道”)通常称为STDIN, STDOUT, and STDERR
。
有时候他们没有命名,他们编号!内置编号为0, 1, and 2
,依次排列。默认情况下,如果您没有明确指定名称或号码,那么您正在讨论STDOUT
。
上面的命令被重定向标准输出到/dev/null
,这是你可以转储你不想要的,然后重定向标准错误到标准输出的任何一个地方(你有你什么时候把一个&
在目标的前面做这个)。
简短的解释,因此,这是“此命令所有的输出应该推到黑洞。”这是一个很好的方法,使一个程序是非常安静!
&
末放命令中的背景。
ref:https://www.xaprb.com/blog/2006/06/06/what-does-devnull-21-mean/
你是什么意思它快速终止?将与在最后会给你及时回来继续在后台执行shell命令,而你的脚本运行。你可以看到,如果它仍然存在通过键入“工作”运行 – Zak
你尝试设置的error_reporting(E_ALL)和设置的display_errors = 1?可能有一些错误,你的进程可能异常终止 – marcelog
尝试:EXEC(“nohup的PHP file.php>的/ dev/null的2> &1 &"); – 2011-08-08 22:19:00