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

我试图通过Linux中的命令行在后台连续运行PHP脚本。 我已经尝试了命令php filename.php &但它看起来像脚本执行非常迅速终止,而它应该保持运行,直到过程终止。

有什么build议么?

你确定脚本不包含任何错误吗? 这通常会使“ 执行很快终止 ”。 首先追加error_reporting(E_ALL); ini_set('display_errors', 1); 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
建议使用完整路径以避免找不到文件错误。

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

尝试使用nohup php filename.php

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

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

 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/