BASH/Linux:始终启动或重试命令?

BASH/Linux:始终启动或重试命令?

对于我的特定用例,我喜欢docker-compose up为几个应用程序提供重试逻辑。

当换档并转向易于使用的 CDN 基础设施时,似乎运行 shell 命令来在单个 Docker 容器中启动所有内容会更简单。

然而,我发现的唯一与“永远向上”逻辑相对应的是:

while true; do start-app || sleep 1; done

我很好奇的是,除了这种系统级操作的有用功能之外,是否真的存在某种 Unix/BASH“重试”工具来确保命令始终运行?

答案1

您可以使用系统

例如创建一个文件/etc/systemd/system/yourapplication.service

[Unit]
Description=Your Super application
After=network-online.target
Wants=network-online.target systemd-networkd-wait-online.service

StartLimitIntervalSec=500
StartLimitBurst=5

[Service]
Restart=on-failure
RestartSec=5s

ExecStart=/path/to/application

[Install]
WantedBy=multi-user.target

或者旧的方法是使用 init 启动应用程序。

在初始化脚本中添加一行

ap:2345:respawn:/bin/sh /somewhere/start-app

ap您的服务 ID(最多 2 个字母)

2345列出此条目适用的运行级别。

  • 2 多用户模式 ​​不配置网络接口或启动守护程序。
  • 3 带网络的多用户模式 ​​正常启动系统。
  • 4 未定义 未使用/用户可定​​义
  • 5 X11 作为运行级别 3 + 显示管理器(X)

respawn为了行动

然后运行命令

相关内容