使用清理脚本处理较长的 systemd oneshot 服务

使用清理脚本处理较长的 systemd oneshot 服务

我有一个 systemd.service 运行一个脚本,该脚本可能需要很长时间(例如几个小时)或很短的时间才能完成,并且当脚本完成时需要调用清理脚本。我的 systemd.service 文件使用Type=oneshot.

用户可以随时停止服务,但随后需要调用清理脚本。

我希望在启动脚本运行时该服务被视为活动的。

目前我已经放入了清理脚本ExecStop并且它似乎可以工作。但有时我会看到服务失败,我认为这可能是因为启动脚本的持续时间较长。

有人可以帮助我了解如何使用 systemd 实现这一目标吗?

答案1

请注意,中指定的命令执行停止=仅当服务首次成功启动时才执行。如果服务根本没有启动过,或者启动失败,例如因为 ExecStart=、ExecStartPre= 或 ExecStartPost= 中指定的任何命令失败(并且没有前缀“-”),则不会调用它们,见上文)或超时。当服务无法正确启动并再次关闭时,使用 ExecStopPost= 调用命令。

执行停止后=

服务停止后执行的附加命令。 [...] 建议使用此设置进行清理操作,即使服务无法正确启动也应执行这些操作。

我想你想用ExecStopPost=.

相关内容