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

2024-04-20

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

有些人建议使用这个(或类似的东西):

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

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

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

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

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


at 命令是一个调度程序,它接受来自标准输入的字符串或包含在特定时间运行的命令的文件。你的例子:

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

将您的命令作为字符串提供给“at”命令并安排它立即运行。

第一种方法是通过 shell 将进程置于后台的典型方法:

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

其中“"> /dev/null”部分告诉 shell 将命令的 stdout 发送到 /dev/null,“2>&1”部分告诉 shell 将命令的 stderr 输出发送到stdout(然后转到/dev/null)。它们一起抑制输出。实际上,您可以通过以下步骤一步完成此操作:

/usr/bin/php command &>/dev/null &                 # bash

末尾的“&”告诉 shell 将进程置于后台。

使用“at”的优点是可以灵活地安排命令在当前以外的其他时间运行(除其他外)。阅读它的手册页。缺点是它可能无法安装在所有系统上。

使用 & via shell 的优点是后台本身没有开销。使用“at”立即运行命令有点矫枉过正,因为它涉及为 at 创建一个新进程、调度该命令、意识到它已设置为立即运行,然后在后台运行它。而在 shell 中使用“&”运行命令只会在后台运行该命令。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该使用“| at now”还是与号(&)在后台运行脚本? 的相关文章

随机推荐