使用 systemd,如何在 A 崩溃时自动重新启动服务 A 和 B?

使用 systemd,如何在 A 崩溃时自动重新启动服务 A 和 B?

B 依赖于 A。每当 A 崩溃时,我希望 systemd 重新启动 A和 B

我能做的

使用BindsTo=a.serviceAfter=a.service写入b.service文件,手动重新启动 A (使用命令systemctl restart a)会导致 systemd :

  1. 停止B;
  2. 停止A;
  3. 开始一个;
  4. 开始B;

这是预期的行为。

但是,模拟 A 崩溃(使用命令killall -SIGKILL a)会导致 systemd:

  1. 停止B;
  2. “停止” A(无论如何,此时它已经崩溃了);
  3. 开始一个;

就是这样。不重新启动 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=不同时使用两者。

使用这两个选项会导致它们相互冲突并导致意外结果。

相关内容