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

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

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

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

while true;
do
    xterm
done

这将运行一个应用程序(xterm在本例中),如果应用程序崩溃,循环将再次启动它。

这样做的缺点是无法“干净地”退出循环。因此,即使用户想要关闭xterm,循环也会再次启动。

有没有办法开始来自 bash 脚本的应用程序,观察它是否正在运行,重新运行如果脚本崩溃或没做什么如果用户正确关闭它?

答案1

尝试这个:

while true; do xterm && break; done

应用程序有退出状态代码这样,如果某项操作正常,它就会返回零……如果出现问题,它会抛出另一个数字。这允许人们介入并找出确切的问题。这就是另一个答案正在做的事情。

&&只是检查前一个命令是否为零状态退出,如果是,则中断循环。如果崩溃,它将抛出除 0 之外的其他值,并且该&& ...子句不会触发;它只会循环回去并运行xterm

答案2

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

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

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

答案3

尝试使用导师非常简单和容易添加要运行的程序或脚本。在你的情况下,你需要最少的command,也许exitcodes程序x节进行配置。

默认exitcodes值为 0,2,因此意味着:

如果进程退出时出现此列表中未定义的退出代码,supervisord 将重新启动该进程

一般来说,你想要的是:重新运行如果脚本崩溃或没做什么如果用户正确关闭它(或脚本成功完成)

首先尝试最简单的配置:

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

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

答案4

我会建议你使用。

until xterm ;  do  echo "program ended with status $?" ; done

如果你的程序被终止,这将重新运行它。

相关内容