繁体   English   中英

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

[英]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进程重新启动。


笔记

phpfilename.php路径可以作为完整路径提供 ,而不是phpfilename.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM