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

时间:2011-08-08 22:04:10

标签: php linux command-line

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

有什么建议吗?

4 个答案:

答案 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进程重新启动。


注释

phpfilename.php路径可以作为完整路径提供,而不是phpfilename.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不会自动将其运行的命令放在后台;你必须明确地做到这一点,通过&结束命令行。符号