如果进程尚未完成,systemd 计时器单元是否会跳过下一次运行?

如果进程尚未完成,systemd 计时器单元是否会跳过下一次运行?

我想使用 systemd 每 5 分钟运行一个命令。但是,存在任务运行时间有时可能超过 5 分钟的风险。那时,systemd 是否会启动该命令的第二个实例,即我最终会运行 2 个进程吗?

如果第一个进程尚未完成,是否可以告诉 systemd 不要启动第二个进程?如果没有,有哪些好的解决方法?

注意:我希望答案是“这是默认行为。只是没有记录。”如果是这种情况,有人可以告诉我如何针对他们的文档提交错误吗?

注意:Cron 有一个类似的问题,在https://unix.stackexchange.com/a/173928/11244。我正在寻找 systemd 的等效项。

答案1

这是默认(也是唯一)行为。它没有明确记录,但由 systemd 的操作逻辑暗示。

systemd.定时器(5)内容如下:

对于每个定时器文件,必须存在一个匹配的单元文件,描述该单元当计时器到时激活

系统(1)反过来,描述了单位状态的概念以及它们之间的转换:

单元可以是“活动的”(意味着启动、绑定、插入……,取决于单元类型,见下文),或“非活动”(意味着停止、未绑定、拔出……),以及在激活或停用过程中,即在两个状态之间(这些状态称为“激活”、“去激活”)。

这意味着定时器的触发导致匹配单元的“激活”,即其转变到“活动”状态。

如果匹配单元在“激活”时已经处于“活动”状态(对于服务单元,这意味着“主进程仍在运行”,除非服务单元具有Type=oneshotRemainAfterExit=true),那么显然不会有任何动作采取。

答案2

刚刚测试了这个,设备似乎可以启动立即地上一次运行结束后,如果设备计划在上一次运行尚未完成时启动。我希望它忽略该运行并等待下一次计时器调用。

相关内容