假设我有一个单元foo.service
,我想在退出后运行bar.service
(无论成功还是失败,任何状态)。我不认为这After=
能帮Before=
我解决这个问题。我如何在 systemd 中而不是在 systemd 启动的脚本中完成此操作?
就上下文而言,在我的环境中,说bar.service
失败了,并且有一行OnFailure=foo.service
强制foo.service
修复问题,然后bar.service
重新启动。
答案1
你可以(可能)使用ExecStopPost=
服务停止后执行的附加命令。这包括使用 中配置的命令
ExecStop=
、服务未定义任何ExecStop=
命令或服务意外退出的情况。此参数接受多个命令行,遵循与 中描述的相同方案。ExecStart=
这些设置的使用是可选的。支持说明符和环境变量替换。请注意 – 与 不同ExecStop=
– 当服务无法正确启动并再次关闭时,将调用使用此设置指定的命令。建议将此设置用于即使服务无法正确启动也应执行的清理操作。使用此设置配置的命令需要能够运行,即使服务中途启动失败并留下未完全初始化的数据。由于执行使用此设置指定的命令时服务的进程已经终止,因此它们不应尝试与它们通信。
请注意,使用此设置配置的所有命令都将使用服务的结果代码以及主进程的退出代码和状态(在 和
$SERVICE_RESULT
环境变量中设置)进行调用,请参阅$EXIT_CODE
$EXIT_STATUS
systemd.exec(5)了解详情。