我正在尝试通过Linux中的命令行在后台持续运行PHP脚本。我已经尝试了命令php filename.php &
,但似乎脚本执行很快就会终止,而它应该一直运行直到进程终止。
有什么建议吗?
答案 0 :(得分:50)
您确定该脚本不包含任何错误吗?这通常会使“执行很快终止” 首先,追加:
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进程重新启动。
php
和filename.php
路径可以作为完整路径提供,而不是php
和filename.php
,您可以使用/usr/bin/php
和/full/path/to/filename.php
。
建议使用完整路径,以避免找不到文件错误。
答案 1 :(得分:16)
当您的会话关闭时,该流程可能会被关闭。
尝试使用nohup php filename.php
答案 2 :(得分:4)
nohup php file.php > /dev/null 2>&1 &
像这样的命令中的大值(>
)将程序的输出重定向到某个地方。在这种情况下,某些内容被重定向到/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/
答案 3 :(得分:3)
nohup /path/to/command-name arg1 arg2 &
其中:
command-name
:shell脚本或命令名称。您可以将参数传递给命令或shell脚本
&
:nohup不会自动将其运行的命令放在后台;你必须明确地做到这一点,通过&结束命令行。符号