对于我的特定用例,我喜欢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
为了行动
然后运行命令