我在命令行,我想手动触发,直到。因此,在生成过程中,直到观察它为止。
这是我的剧本
#!/bin/bash
echo '**************************************'
echo '* Run IRC Bot *'
echo '**************************************'
echo '';
if [ -z "$1" ]
then
echo 'Example usage: ' $0 'intelbot'
fi
until `php $1.php`;
do
echo "IRC bot '$1' crashed with the code $?. Respawning.." >&2;
sleep 5
done;
我应该用什么杀戮选项来说,直到,嘿我希望这个过程被杀死,我希望你让它再次运作!
答案 0 :(得分:1)
首先 - 根本不要这样做;使用适当的流程监督系统为您自动重启程序,而不是shell脚本。您的操作系统将附带一个,不管是SysV init的/etc/inittab
(是的,如果给出适当的标志,它们将在退出后重新启动程序),或更现代的新贵(Ubuntu附带),systemd(与当前的Fedora和Arch Linux一起发布,runit,daemontools,supervisord,launchd(随MacOS X一起提供)等。
第二:反引号实际上使你的代码以不可预测的方式运行;扩展报告缺乏报价也是如此。
`php $1.php`
...执行以下操作:
$1
的值替换为字符串;让我们说它是my * code.php
。my
,*
和code.php
*
将替换为当前目录中每个文件的单独参数相反:
until php "$1.php"; do
echo "IRC bot '$1' crashed with the code $?. Respawning.." >&2;
sleep 5
done;
现在,PHP收到SIGTERM时返回的退出状态可以由PHP的信号处理程序控制 - 除非你告诉我们你的PHP代码是如何编写的,只有代码无法处理(例如SIGKILL)将以完全一致的方式运行,而因为无法处理它们,如果您的程序需要进行任何类型的安全关闭或清理,它们就会很危险。
如果您希望PHP代码安装信号处理程序,那么您可以在发出信号时控制其退出状态,请参阅http://php.net/manual/en/function.pcntl-signal.php