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
我在命令行,我想手动触发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