退出 systemd 服务时发送失败的调试通知

退出 systemd 服务时发送失败的调试通知

我有两个服务:服务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

man systemd.unit

之后=

... After= 确保列出的单元在配置的单元启动之前完全启动。 ...当所有配置的启动命令都已被调用并且它们失败或报告启动成功时,启动被视为已完成

因此,After=依赖项将在serviceA启动成功或失败后启动serviceB。

您正在寻找的是以下组合:

After=serviceA
Requires=serviceA

man systemd.unit

需要=

...如果该单位被激活,列出的单位也将被激活。如果其他单元之一无法激活,并且设置了对失败单元的排序依赖性 After=,则该单元将不会启动。

这里关于关闭的逻辑还有一些技巧。如果 serviceA 顺利完成,serviceB 将继续运行。如果显式停止或重新启动serviceA,则serviceB也将停止或重新启动。

如果您希望 serviceB 在 serviceA 自然停止时退出,则使用BindTo=依赖项。

相关内容