开始和停止一个systemd单位与另一个

我有两个服务A.service和B.service。 当A退出/被杀害/停止时,我要B停止。 另外,当A重新启动时,我希望B重新启动。 我尝试了如何启动和停止与另一个systemd单位给出的答案? 并设置我的文件,如下所示:

A.service

[Unit] Description=A Before=B.service Requires=B.service [Service] ExecStart=/usr/share/A ExecStopPost=/usr/evo/exit_handler.sh %p Restart=always StartLimitBurst=3 StartLimitInterval=300 

B.service

 [Unit] Description=B BindsTo=A.service [Service] Type=forking ExecStart=/usr/share/B start ExecStop=/usr/share/B stop StartLimitBurst=5 StartLimitInterval=10 Restart=always 

当我杀死A或做一个systemctl重新启动A,我看到B重新启动。 但是,当A退出状态0,我没有看到B重新启动。 我已经启用systemddebugginglogin,我看到A的状态更改为已死,但不能自动重启

你的B单位正在使用BindsTo= ,这是为了跟踪可能消失的单位的状态。

你想要什么而不是这个PartOf= ,这个服务将正确地跟踪指定服务的状态。 从文档 :

PartOf=
configuration与Requires=类似的依赖关系,但仅限于停止和重新启动单位。 当systemd停止或重新启动这里列出的单位时,动作传播到这个单位。 请注意,这是单向依赖关系 – 对此单位的更改不会影响列出的单位。

不过,我认为这不会解决你所有的问题。 我怀疑你没有仔细考虑过你的两个服务之间的实际依赖关系,并且需要做一些更多的思考(并能够expression自己),然后才能使这些单元做他们需要做的事情。