B 依赖于 A。每当 A 崩溃时,我希望 systemd 重新启动 A和 B。
我能做的
使用BindsTo=a.service
和After=a.service
写入b.service
文件,手动重新启动 A (使用命令systemctl restart a
)会导致 systemd :
- 停止B;
- 停止A;
- 开始一个;
- 开始B;
这是预期的行为。
但是,模拟 A 崩溃(使用命令killall -SIGKILL a
)会导致 systemd:
- 停止B;
- “停止” A(无论如何,此时它已经崩溃了);
- 开始一个;
就是这样。不重新启动 B。
我的.service
文件现在是什么样子的
a.service
:
[Unit]
Description=A
[Service]
Type=simple
User=root
Group=root
UMask=007
ExecStart=/usr/bin/a
Restart=on-failure
TimeoutStopSec=10
[Install]
WantedBy=multi-user.target
b.service
:
[Unit]
Description=B
After=a.service
BindsTo=a.service
PartOf=a.service
[Service]
Type=simple
User=root
Group=root
UMask=007
ExecStart=/usr/bin/b
Restart=always
TimeoutStopSec=10
[Install]
WantedBy=multi-user.target
答案1
您应该使用其中之一,PartOf=
或者BindsTo=
不同时使用两者。
使用这两个选项会导致它们相互冲突并导致意外结果。