崩溃时重新运行应用程序脚本?


18

我有一些需要始终在笔记本电脑上运行的应用程序。

我使用bash脚本启动这些应用程序。在我的脚本中,我有一个类似于以下内容的循环:

while true;
do
    xterm
done

这将运行一个应用程序(xterm在这种情况下),如果应用程序崩溃,则循环将再次启动它。

这样做的缺点是该循环中没有“干净”的出口。因此,即使用户打算关闭xterm,循环也会再次启动它。

有没有一种方法可以从bash脚本启动应用程序,观察它是否正在运行,如果脚本崩溃则重新运行它,或者如果用户正确关闭了它则什么也不做

Answers:


30

尝试这个:

while true; do xterm && break; done

应用程序具有退出状态代码,因此,如果退出正常,则返回零...;如果出现错误,则抛出另一个数字。这使人们可以了解并找出确切的问题。这就是另一个答案正在做的事情。

&&只需检查先前的命令是否为零状态出口,如果是,则中断循环。如果崩溃,它将抛出0以外的值,并且该&& ...子句不会触发;它会简单地循环运行xterm


6
很好看
奥利(Oli)

嗯..还有另一种方式:while xterm; do true; done
大师

1
@muru:这对我有用:while ! xterm; do :; done
Cyrus

1
@Cyrus啊,是的。忘记了!
muru

我创造了一个怪物。我该如何杀死它?
托尼·露丝

6

在这种while情况下,您可以使用以下方法测试退出状态是否xterm成功:

result=1
while [ $result -ne 0 ]; do
    xterm
    result=$?
done

$? 变量保存最后执行的命令的退出状态。


0

我会建议您使用。

直到xterm; 是否回显“程序以$状态结束?” ; 完成

如果程序被杀死,它将重新运行您的程序。


0

尝试使用Supervisor,它非常简单容易地添加要运行的程序或脚本。在您需要最小化的情况下command,可能需要exitcodesprogramx-section中进行配置。

默认exitcodes值为0.2,因此表示:

如果以没有在此列表中定义的退出代码退出,则超级用户将重新启动该过程

通常,您想要的是:如果脚本崩溃,重新运行它;如果用户正确关闭了它,则不执行任何操作(或脚本成功完成了)

首先尝试最简单的配置:

[program:you_app_name]
command=/path/to/you/app

要获得更大的灵活性,请参阅配置文件文档。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.