我有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失败了它应该停止/退出吗?
答案 0 :(得分:1)
您想在BindsTo=
部分添加Requires=
或[Unit]
,如man systemd.unit
中所述:
<强>需要= 强> 配置对其他单元的需求依赖性。如果此单元被激活,则此处列出的单位 也将被激活。如果其他一个单元被停用或其激活失败,则为此单元 将被停用。可以多次指定此选项,也可以指定多个以空格分隔的单位 在一个选项中指定,在这种情况下,将创建所有列出的名称的需求依赖项。 请注意,需求依赖性不会影响服务的启动或停止顺序。 必须使用After =或Before =选项独立配置。如果一个单位foo.service 需要使用Requires =配置的单位bar.service,并且不使用After =或配置排序 在=之前,两个单元将同时启动,如果它们之间没有任何延迟 foo.service已激活。通常,使用Wants =而不是Requires =是一个更好的选择 在处理失败的服务时,实现一个更强大的系统。
<强> BindsTo = 强> 配置需求依赖项,风格与Requires =非常相似,但除此之外 行为,它还声明当列出的任何单位突然消失时,此单位停止。 如果服务终止于自己的选择,设备就会突然意外消失 在没有systemd参与的情况下卸下未插入或挂载点。