我有一些应用程序需要一直在我的笔记本电脑上运行。
我使用 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
如果你的程序被终止,这将重新运行它。