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

Kyl*_*yle 32 php linux command-line

我正在尝试通过Linux中的命令行在后台持续运行PHP脚本.我已经尝试过该命令php filename.php &但似乎脚本执行很快就会终止,而它应该继续运行直到进程终止.

有什么建议?

Ped*_*ito 54

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

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路径可以被设置为一个完整路径,而不是phpfilename.php,你可以使用/usr/bin/php/full/path/to/filename.php.
建议使用完整路径以避免文件未找到错误.


mus*_*afa 16

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

尝试使用 nohup php filename.php


Kis*_*dev 5

nohup php file.php > /dev/null 2>&1 &
Run Code Online (Sandbox Code Playgroud)

此类>命令中的大于号()将程序的输出重定向到某处。在这种情况下,某些内容将被重定向到/dev/null,而某些内容将被重定向到&1

标准输入,输出和错误

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

有时他们没有被命名,而是被编号!它们的内置编号为0, 1, and 2,顺序为。默认情况下,如果您未明确命名或排名第一,则是在谈论STDOUT

上面的命令将标准输出重定向到/dev/null,在这里您可以转储不需要的任何内容,然后将标准错误重定向到标准输出(&执行此操作时必须在目标前面放置一个)。

因此,简短的解释是“该命令的所有输出都应该被塞进一个黑洞中。”这是使程序真正安静的一种好方法!

& 最后将命令置于后台。

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