我想使用 systemd 每 5 分钟运行一次命令。但是,有时任务运行时间可能会超过 5 分钟,这是存在风险的。那时,systemd 会启动命令的第二个实例,即我最终会运行 2 个进程吗?
如果第一个进程尚未完成,是否可以告诉 systemd 不要启动第二个进程?如果没有,有什么好的解决方法?
注意:我希望答案是“这是默认行为。只是没有记录。” 如果是这种情况,有人可以告诉我如何针对他们的文档提交错误吗?
注意:Cron 有一个类似的问题,在https://unix.stackexchange.com/a/173928/11244 中讨论过。我正在寻找 systemd 等价物。
int*_*lfx 44
这是默认的(也是唯一的)行为。它没有明确记录,但由 systemd 的操作逻辑暗示。
对于每个计时器文件,必须存在匹配的单元文件,描述在计时器结束时要激活的单元。
systemd(1)反过来描述了单元状态的概念以及它们之间的转换:
单元可能是“活动的”(意思是启动、绑定、插入……,取决于单元类型,见下文)或“非活动”(意思是停止、未绑定、未插入……),以及在被激活或去激活的过程,即在两种状态之间(这些状态被称为“激活”、“去激活”)。
这意味着定时器的触发导致匹配单元的“激活”,即其转换到“活动”状态。
如果匹配单元在“激活”时已经“激活”(对于服务单元,这意味着“主进程仍在运行”,除非服务单元有Type=oneshot和RemainAfterExit=true),显然不会有任何动作采取。