相关文章推荐

从命令行作为后台进程运行PHP脚本

35 人关注

我试图通过Linux的命令行在后台持续运行一个PHP脚本。我试过命令 php filename.php & ,但似乎脚本的执行很快就终止了,而它应该一直运行到进程终止。

有什么建议吗?

5 个评论
Zak
What do you mean it terminates quickly? The & at the end will give you your prompt back to continue executing shell commands while your script runs in the background.. You can see if it is still there running by typing "jobs"
你是否尝试设置error_reporting(E_ALL)并设置display_errors=1?
try: exec("nohup php file.php >/dev/null 2>&1 &");
Kyle
@Zak:我可以执行我提到的命令,然后它就会返回。如果我之后运行 jobs ,它会列出进程,但说它已经停止。
Kyle
如果我不使用 & 标志来运行它,那么它将继续运行,直到我与服务器断开连接为止,但我想在后台24/7不断地运行它。
php
linux
command-line
Kyle
Kyle
发布于 2011-08-09
4 个回答
Pedro Lobito
Pedro Lobito
发布于 2016-05-12
已采纳
0 人赞同

你确定该脚本不包含任何错误吗?这通常是使" 执行很快就会终止 ".
首先,追加。

error_reporting(E_ALL); ini_set('display_errors', 1);

在你的脚本顶部显示任何可能存在的错误,然后你可以使用:

nohup php filename.php &

nohup运行一个命令,即使会话被断开或用户

nohup php filename.php >/dev/null 2>&1 &

与上述相同,但不创建 nohup.out 文件。

你也可以使用。
ignore_user_abort(1);

设置客户端断开连接是否应中止脚本的执行

`set_time_limit(0);`

限制了脚本的最大执行时间,在这种情况下,它将运行到 进程结束或apache进程重新启动。

替换代码5】和 filename.php 的路径可以作为一个 全路径 , instead of php and filename.php , you can use /usr/bin/php and /full/path/to/filename.php .
建议使用完整路径 以避免 file not found errors.

Kyle
如果没有输出重定向,echo语句会导致脚本终止吗?
mustafa
mustafa
发布于 2016-05-12
0 人赞同

当你的会话结束时,该过程可能会被关闭。

try using nohup php filename.php

Kishan Rajdev
Kishan Rajdev
发布于 2016-05-12
0 人赞同
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/

Yash Tomar -Aeologic
Yash Tomar -Aeologic
发布于 2016-05-12
0 人赞同
nohup /path/to/command-name arg1 arg2 &
 
推荐文章