我在同一台机器上运行两个服务,A 和 B。A 是服务器,B 是客户端
- A 可以单独运行,但 B 必须先运行 A 才能启动
- 如果 A 崩溃、停止或重新启动,B 必须停止或重新启动
- 如果 B 崩溃、停止或重启,A 不会受到影响并可以继续运行
在 B.service 中我应该使用Requires
还是BindsTo
?
[Unit]
Description=service B
After=A.service
Requires=A.service
或者
[Unit]
Description=service B
After=A.service
BindsTo=A.service
我是否需要添加计数器部分,例如RequiredBy
或ConsistsOf
在 A.service 中?
答案1
使用第二个选项 (BindsTo + After) 最适合您的用例。BindsTo 允许 B 在 A 停止时停止,在 A 启动时启动。当 A 尚未启动时,B 不会启动。
答案2
BindsTo
与 不同Requires
。a.service
意外/异常停止时,b.service
仅在使用 时停止BindsTo
。
手册页确实说,使用Requires
,“明确”停止a.service
也会停止b.service
。但手册页上没有明确说明使用 时同样的情况会怎样。手册页还在部分中BindsTo
说意外停止a.service
也会停止。但同样,对于使用 时意外停止会产生什么影响,手册页也不够清楚。b.service
BindsTo
Requires
请查看这篇详细的文章,它解释得很清楚。
https://pychao.com/2021/02/24/difference-between-partof-and-bindsto-in-a-systemd-unit/
披露:我不是作者。