Systemctl依赖性失败,停止依赖服务

时间:2017-03-10 09:25:57

标签: linux service systemd watchdog systemctl

我有2个服务a.service和b.service。 a.service显示

[Unit]
Description=My service

[Service]
Type=forking
ExecStart=/bin/sh /home/admin/run.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target,

b.service

[Unit]
Description=My service

[Service]
Type=forking
ExecStart=/bin/sh $HOME/theFolder/run.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target

现在,当我启动b.service时,我确定将启动a.service。 在运行期间,突然有人混淆/home/admin/run.sh并且systemd无法启动a.service(系统状态a.service也显示为失败状态)。现在有一个选项,以便b.service可以知道a.service失败了它应该停止/退出吗?

1 个答案:

答案 0 :(得分:1)

您想在BindsTo=部分添加Requires=[Unit],如man systemd.unit中所述:

  

<强>需要=        配置对其他单元的需求依赖性。如果此单元被激活,则此处列出的单位        也将被激活。如果其他一个单元被停用或其激活失败,则为此单元        将被停用。可以多次指定此选项,也可以指定多个以空格分隔的单位        在一个选项中指定,在这种情况下,将创建所有列出的名称的需求依赖项。        请注意,需求依赖性不会影响服务的启动或停止顺序。        必须使用After =或Before =选项独立配置。如果一个单位foo.service        需要使用Requires =配置的单位bar.service,并且不使用After =或配置排序        在=之前,两个单元将同时启动,如果它们之间没有任何延迟        foo.service已激活。通常,使用Wants =而不是Requires =是一个更好的选择        在处理失败的服务时,实现一个更强大的系统。

     

<强> BindsTo =        配置需求依赖项,风格与Requires =非常相似,但除此之外        行为,它还声明当列出的任何单位突然消失时,此单位停止。        如果服务终止于自己的选择,设备就会突然意外消失        在没有systemd参与的情况下卸下未插入或挂载点。