BASH: 如何退出脚本,触发直到重新生成脚本

BASH: How to exit from a script, trigging until to respawn the script

我在命令行,我想手动触发until。从而使生成的进程在 until 正在观看时终止。

这是我的脚本

#!/bin/bash

echo '**************************************'
echo '*          Run IRC Bot               *'
echo '**************************************'
echo '';
if [ -z "" ] 
    then
        echo 'Example usage: ' [=11=] 'intelbot'
fi

until `php .php`; 
    do 
        echo "IRC bot '' crashed with the code $?.  Respawning.." >&2; 
        sleep 5 
done;

我应该使用什么终止选项直到,嘿,我希望终止此进程,我希望你让它再次运行!

首先——根本不要这样做;使用适当的过程监控系统为您自动重启程序,而不是 shell 脚本。您的操作系统将附带一个,无论是 SysV init 的 /etc/inittab(是的,如果给定适当的标志,它将在退出时重新启动如此列出的程序),或者更现代的新贵(附带 Ubuntu )、systemd(与当前的 Fedora 和 Arch Linux 一起提供)、runit、daemontools、supervisord、launchd(与 MacOS X 一起提供)等


其次:反引号实际上使您的代码以不可预测的方式运行;扩展中缺少引号也是如此。

`php .php`

...执行以下操作:

  • </code>的值代入字符串;假设它是 <code>my * code.php.
  • 字符串拆分该值;在这种情况下,它会将其更改为三个单独的参数:my*code.php
  • 全局扩展那些参数;在这种情况下,* 将替换为当前目录中每个文件的单独参数
  • 运行生成的程序
  • 读取程序写入标准输出的输出,并将该输出作为单独的命令运行
  • Returns 该单独命令的退出状态。

改为:

until php ".php"; do 
    echo "IRC bot '' crashed with the code $?.  Respawning.." >&2; 
    sleep 5 
done;

现在,PHP 在收到 SIGTERM 时返回的退出状态可以由 PHP 的信号处理程序控制——除非你告诉我们你的 PHP 编写代码,只有无法处理的代码(例如 SIGKILL)才会以完全一致的方式运行,并且 因为 它们无法处理,所以它们很危险如果您的程序需要进行任何类型的安全关闭或清理。

如果您希望 PHP 代码安装信号处理程序,以便您可以在收到信号时控制其退出状态,请参阅 http://php.net/manual/en/function.pcntl-signal.php