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


Running PHP script from command line as background process

我试图通过Linux命令行在后台不断运行PHP脚本。我已经尝试了命令php filename.php &,但似乎脚本执行终止得很快,而它应该继续运行,直到进程终止。

有什么建议吗?

您确定脚本不包含任何错误吗?这就是为什么执行会很快终止"。
首先,添加:

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进程重启


#笔记phpfilename.php路径可以作为全路径提供,可以使用/usr/bin/php/full/path/to/filename.php代替phpfilename.php
建议使用全路径以避免file not found错误。

当您的会话关闭时,进程可能被关闭。

尝试使用nohup php filename.php

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

像这样的命令中的大于(>)将程序的输出重定向到某个地方。在本例中,某些内容被重定向到/dev/null,某些内容被重定向到&1

标准输入、输出和错误

一个程序有三个标准的输入和输出源。如果它是一个交互式程序,标准输入通常来自键盘,如果它正在处理另一个程序的输出,则来自另一个程序。程序通常打印到标准输出,有时打印到标准错误。这三个文件描述符(您可以将它们视为"数据管道")通常称为STDIN, STDOUT, and STDERR

有时他们没有名字,他们是编号!它们的内置编号是0, 1, and 2,按此顺序。默认情况下,如果您没有明确地命名或编号1,则您正在谈论STDOUT

上面的命令将标准输出重定向到/dev/null,这是一个您可以转储任何您不想要的东西的地方,然后将标准错误重定向到标准输出(当您这样做时,您必须在目的地前面放置一个&)。

因此,简短的解释是"这个命令的所有输出都应该被推入黑洞。"这是使程序非常安静的一个好方法!

最后的&将命令置于后台。

裁判:https://www.xaprb.com/blog/2006/06/06/what-does-devnull-21-mean/

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

地点:
command-name: shell脚本名或命令名。可以将参数传递给命令或shell脚本。
&: nohup不会自动将它运行的命令放在后台;您必须显式地这样做,在命令行结束时使用&象征。