它已被确认如果之前的运行尚未完成,systemd 计时器将不会启动 .service。但是,由于未知的原因,这会阻止Type=oneshot
我的计算机上的一些备份进程(它们似乎仍处于激活状态,可能是竞争条件,但这可能无关紧要)。
如果 systemd 计时器运行,OnCalendar=hourly
有什么方法可以告诉它每次运行,而不管之前运行中发生了什么(这样可以确保备份将会运行并且不会意外地破坏你喜欢的一切)?
答案1
如果 systemd 计时器运行 OnCalendar=hourly 有没有办法告诉它每次运行而不管之前运行中发生了什么(这样可以确保备份会运行并且不会意外地破坏你喜欢的一切)?
这些计时器实际上完成了它们的工作并运行,它们只是不“重新启动”它们要激活的备份服务,因为该服务仍然具有“已激活”或“活动”的触发状态,以防它仍在运行...
- 为了明确该行为是正确的:
- 当相关服务已经在运行时,当它实际上启动了同一服务的另一个实例时,您会期望发生什么?
让两个备份服务同时运行并同时并行覆盖彼此的文件是否可以接受?
我觉得不对吧? - 您试图使用按钮“B”将灯泡“打开”,而由于按钮“A”而灯泡已经“打开”,这当然没有任何效果。
- 当相关服务已经在运行时,当它实际上启动了同一服务的另一个实例时,您会期望发生什么?
所以...为了确保您的计时器“重新启动”您的服务,请确保备份服务的完成时间少于 1 小时,从而失去活动状态...请参阅 中RuntimeMaxSec=
的man systemd.service
解释。或者如果备份确实需要更多时间,请使用更长的计时器,因为一半或未完成的备份与根本没有备份相同,对吗?
为了给出更好的答案,如果您发布这些“Type=oneshot”备份服务文件的内容将会有所帮助,因为我认为它们无论如何都需要更改。