[英]Running PHP script from command line as background process
我正在尝试通过 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
路径可以作为完整路径提供 ,而不是php
和filename.php
,你可以使用/usr/bin/php
和/full/path/to/filename.php
。
建议使用完整路径以避免文件未找到错误。
您的会话结束时,该流程可能会被关闭。
尝试使用nohup php filename.php
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/
nohup /path/to/command-name arg1 arg2 &
哪里:
command-name
:shell脚本或命令名称。 您可以将参数传递给命令或shell脚本。
&
:nohup不会自动将其运行的命令放在后台; 您必须通过使用&符号结束命令行来明确地执行此操作。
nohup php filename.php >/dev/null 2>&1 &
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.