![Systemd BindsTo - 服务崩溃后重新启动](https://linux22.com/image/225247/Systemd%20BindsTo%20-%20%E6%9C%8D%E5%8A%A1%E5%B4%A9%E6%BA%83%E5%90%8E%E9%87%8D%E6%96%B0%E5%90%AF%E5%8A%A8.png)
我的系统有多个systemd服务,让我们a.service
通过z.service
.只要所有这些服务都在运行,我的系统就被认为是“正在运行”。
该状态应在某处指示,即在设备状态 LED 上指示。为此,我想到使用另一个 systemd 服务,我们称之为system-status.service
,它执行以下操作:
- 当所有服务都
active
显示正在运行时 - 当任何服务崩溃/停止时表明未运行
使用这个不完整的代码片段system-status.service
运行良好,除了一种情况:
[Unit]
BindsTo=a.service
BindsTo=b.service
...
After=a.service
After=b.service
...
[Service]
ExecStart=/usr/bin/indicate-running.sh
ExecStop=/usr/bin/indicate-stopped.sh
但是,如果a.service
包含行Restart=always
,并且a.service
崩溃(通过 模拟kill -9
),a.service
则成功重启,但system-status.service
不是!
kill -9 <a.pid>
有任何想法吗?谢谢!
答案1
您需要的是和Wants=system-status.service
之间的关系。假设您不想添加对这两个服务的覆盖,您应该将反向关系添加到安装部分:a.service
b.service
system-status.service
...
[Install]
WantedBy=a.service
WantedBy=b.service
要使此部分生效,您必须systemctl enable system-status.service
再次运行。