我最近得到了一个主机,其中 java 应用程序以这种方式启动:
/bin/bash ./restarter.sh java <lot of java params>
它确保如果应用程序终止,则restarter.sh
再次运行它。
有以下内容restarter.sh
:
#!/bin/bash
until "$@"; do
echo "Server crashed with exit code $?. Respawning.." >&2
sleep 1
done
请帮助我了解它是如何工作的。
答案1
这意味着循环直到命令(“$@”)完成执行并退出代码为0。
例子:
$ until (echo Myprog ; sleep 1; exit 1;); do echo Error respawning ...; done
Myprog
Error respawning ...
Myprog
Error respawning ...
Myprog
^C
$ until (echo Myprog ; sleep 1; exit 0;); do echo Error respawning ...; done
Myprog
分析你的脚本: 通常,编写良好的应用程序会在成功完成时以零退出代码退出,否则以非零退出代码退出。在您的情况下,您正在使用 Until 命令来继续重新启动应用程序:
java <lot of java params>
直到应用程序成功完成其执行(退出代码为零)。