我应该使用“| at now”还是&符号(&)来在后台运行脚本?

时间:2011-12-10 16:21:09

标签: php linux shell

我一直在寻找关于在后台运行php脚本的答案,它们似乎以两种方式传播。

有人建议使用此(或类似的东西):

/usr/bin/php command >/dev/null 2>&1 &

其他建议使用“at”命令:

echo '/usr/bin/php command'| at now

两种方法的主要区别是什么?有什么优点和缺点?

我要做的是当用户提交表单时,我需要运行几分钟长的脚本,显然应该在后台运行。我已经尝试了两种方式,但它们都适合我,但我不确定选择哪种方式。

2 个答案:

答案 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时进程保持运行。

相关问题