2011-08-08 91 views
19

我试图通过Linux中的命令行在后台连续运行PHP脚本。我已经尝试了命令php filename.php &,但似乎脚本执行非常快,而它应该保持运行,直到进程终止。从命令行运行PHP脚本作为后台进程

有什么建议吗?

+2

你是什么意思它快速终止?将与在最后会给你及时回来继续在后台执行shell命令,而你的脚本运行。你可以看到,如果它仍然存在通过键入“工作”运行 – Zak

+1

你尝试设置的error_reporting(E_ALL)和设置的display_errors = 1?可能有一些错误,你的进程可能异常终止 – marcelog

+2

尝试:EXEC(“nohup的PHP file.php>的/ dev/null的2> &1 &"); – 2011-08-08 22:19:00

回答

37

确定的脚本不包含任何错误?这通常会使“执行非常快地终止”。 首先,在你的脚本来显示它可能有任何错误的顶部追加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进程重新启动。


注释

phpfilename.php路径可以被提供为全路径,代替phpfilename.php,可以使用/usr/bin/php/full/path/to/filename.php
完整路径建议避免找不到文件错误。

+0

如果没有输出重定向,echo语句会导致脚本终止? – Kyle

+1

@Pedro Lobito谢谢你的伴侣 – whitesiroi

+0

不客气@whitesiroi –

15

当你的会话关闭的过程中可能被关闭。

尝试使用nohup php filename.php

+0

真棒,谢谢! – arik

2
nohup /path/to/command-name arg1 arg2 & 

其中:
command-name:shell脚本或者命令的名字命名。您可以将参数传递给命令或shell脚本。
&:nohup不会自动把它在后台运行的命令;你必须明确地做到这一点,通过以&符号结束命令行。

+1

重复[answer](http://stackoverflow.com/a/6989340/6209665)。然后使用[code formatting](https://meta.stackexchange.com/que请参阅/ 22186/how-do-i-format-my-code-blocks)。 – Andrew

2
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/