Php 我应该用“吗?”“现在”;还是使用符号(&;)在后台运行脚本?
我一直在寻找关于在后台运行php脚本的答案,它们似乎以两种方式传播 有些人建议使用以下方法(或类似方法): 其他建议使用“at”命令: 这两种方法的主要区别是什么?利与弊是什么Php 我应该用“吗?”“现在”;还是使用符号(&;)在后台运行脚本?,php,linux,shell,Php,Linux,Shell,我一直在寻找关于在后台运行php脚本的答案,它们似乎以两种方式传播 有些人建议使用以下方法(或类似方法): 其他建议使用“at”命令: 这两种方法的主要区别是什么?利与弊是什么 我要做的是,当用户提交表单时,我需要运行几分钟长的脚本,显然应该在后台运行。我尝试了两种方法,它们都对我有效,但我不确定选择哪一种。当您使用at命令调用它时,程序在后台由at守护进程执行 当您使用&时,进程仍然连接到当前shell。关闭shell时,进程将终止。您还可以执行nohoup/usr/bin/php命令,这样当
我要做的是,当用户提交表单时,我需要运行几分钟长的脚本,显然应该在后台运行。我尝试了两种方法,它们都对我有效,但我不确定选择哪一种。当您使用
at
命令调用它时,程序在后台由at
守护进程执行
当您使用
&
时,进程仍然连接到当前shell。关闭shell时,进程将终止。您还可以执行nohoup/usr/bin/php命令
,这样当您关闭shell时,进程将保持运行。at命令是一个调度器,它接受stdin中的字符串或包含要在特定时间运行的命令的文件。你的例子是:
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外壳的优点是,在背面接地本身没有开销。使用“at”立即运行命令有点过分,因为它涉及到为at创建一个新进程、调度命令、意识到它被设置为现在运行,然后在后台运行它。而在shell中运行带有“&”的命令只需在后台运行该命令。我认为关闭shell问题就是关闭会话。在这种情况下,进程最终在Web服务器下运行,您不会期望脚本仅仅因为父线程(webserver/php)终止而死亡。但是,脚本将在没有父进程的情况下运行。at对这类事情唯一有用的时间是,如果您希望在收到大量请求时分散负载。。。例如:计划第一个现在开始,但第二个从现在开始5分钟,第三个10分钟。
现在
不会在夏令时切换回来的小时内立即执行(现在在欧盟)。我将在2:14第二次执行死刑!
/usr/bin/php command >/dev/null 2>&1 &
/usr/bin/php command &>/dev/null & # bash