我试图通过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进程重启
#笔记php
和filename.php
路径可以作为全路径提供,可以使用/usr/bin/php
和/full/path/to/filename.php
代替php
和filename.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不会自动将它运行的命令放在后台;您必须显式地这样做,在命令行结束时使用&象征。