我一直在寻找关于在后台运行php脚本的答案,它们似乎以两种方式传播。
有人建议使用此(或类似的东西):
/usr/bin/php command >/dev/null 2>&1 &
其他建议使用“at”命令:
echo '/usr/bin/php command'| at now
两种方法的主要区别是什么?有什么优点和缺点?
我要做的是当用户提交表单时,我需要运行几分钟长的脚本,显然应该在后台运行。我已经尝试了两种方式,但它们都适合我,但我不确定选择哪种方式。
答案 0 :(得分:6)
at命令是一个调度程序,它接受来自stdin的字符串或包含在特定时间运行的命令的文件。你的例子:
echo '/usr/bin/php command'| at now
给予' at'命令您的命令作为字符串并安排它立即运行。
第一种方法是通过shell来处理进程的典型方法:
/usr/bin/php command >/dev/null 2>&1 &
">的/ dev / null的"部分原因是告诉shell将命令的标准输出发送到/ dev / null,以及" 2>& 1"部分原因是将命令的stderr输出发送到stdout(然后转到/ dev / null)。它们共同抑制了输出。您实际上可以通过以下步骤一步完成:
/usr/bin/php command &>/dev/null & # bash
'&'最后是告诉shell后台进程的内容。
使用''调度命令的灵活性是在其他时间运行(除其他外)。阅读手册页。缺点是它可能不会安装在所有系统上。
使用&的优点via shells是背景本身没有开销。使用' at'立即运行命令有点过分,因为它涉及为at创建一个新进程,调度命令,意识到它已设置为现在运行,然后在后台运行它。而使用"&"运行命令;在shell中只需在后台运行该命令。
答案 1 :(得分:2)
当您使用at
命令调用它时,程序将由at
守护程序在后台执行。
当您使用&
时,该进程仍会附加到当前shell。关闭shell时,进程将终止。您还可以执行nohoup /usr/bin/php command
,以便在关闭shell时进程保持运行。