我有两个服务:服务A和服务B。服务 A 的类型为notify
,服务 B 的类型为simple
。服务 B 已After=serviceA.service
设置为确保服务 B 仅在服务 A 发送准备就绪的通知后启动。
我正在检查服务 A 以非零代码退出而不发送通知或发送带有错误的通知(例如 )的情况ERRNO=2
。服务 B 等待服务 A 执行,但一旦服务 A 出错,服务 B 就会开始运行。服务 B 仅应在服务 A 发送 时开始运行READY=1
。我如何调试哪个通知正在触发服务 B 开始执行,这也是预期的行为吗?
答案1
之后=
... After= 确保列出的单元在配置的单元启动之前完全启动。 ...当所有配置的启动命令都已被调用并且它们失败或报告启动成功时,启动被视为已完成
因此,After=
依赖项将在serviceA启动成功或失败后启动serviceB。
您正在寻找的是以下组合:
After=serviceA
Requires=serviceA
需要=
...如果该单位被激活,列出的单位也将被激活。如果其他单元之一无法激活,并且设置了对失败单元的排序依赖性 After=,则该单元将不会启动。
这里关于关闭的逻辑还有一些技巧。如果 serviceA 顺利完成,serviceB 将继续运行。如果显式停止或重新启动serviceA,则serviceB也将停止或重新启动。
如果您希望 serviceB 在 serviceA 自然停止时退出,则使用BindTo=
依赖项。