我有一个 systemd 服务单元:
[Unit]
After=network.target
[Service]
User=<user>
Type=forking
ExecStart=/opt/app/start.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
/opt/app/start.sh 启动多个进程并分叉它们:
for i in 1 2 3 4 5; do
bash another_script.sh &
done
所有的事情都工作正常,直到其中一个bash another_script.sh
进程以非零状态退出。我希望 systemd 服务在这种情况下应该重新启动。如果发生这种情况,有什么方法可以观察控制组故障并重新启动服务吗?
答案1
对照组不是工作。
不存在“对照组失败”这样的事情。控制组只是用于资源限制的集合。他们不会“失败”。
这里的失败是未能正确设计服务。如果需要监视多个守护进程,并且希望服务管理器在它们终止时单独重新启动它们,那么应该定义多个服务。
进一步阅读
- 乔纳森·德博因·波拉德 (2016)。Linux 控制组不是工作。经常给出的答案。
- 乔纳森·德博因·波拉德 (2016)。 ”如果您有两个服务,请定义两个服务。”。
systemd
恐怖之屋。经常给出的答案。
答案2
从help wait
:
如果提供了 -n 选项,则等待下一个作业终止并返回其退出状态。
因此,您应该能够wait -n
在脚本中使用来了解任何作业何时完成。