![时间同步和计划任务](https://linux22.com/image/482023/%E6%97%B6%E9%97%B4%E5%90%8C%E6%AD%A5%E5%92%8C%E8%AE%A1%E5%88%92%E4%BB%BB%E5%8A%A1.png)
如果 NTP 在 10:59:55 运行,并将时间固定为 11:00:13,那么 chron 是否会运行 11:00:00 和 *:00:00 任务,还是会跳过这些任务?
或者,如果 NTP 在 11:00:00 运行并将时间固定为 10:59:48,这些任务会运行两次吗?
如果跳过了,用什么方法可以解决这个问题?
那么其他调度程序(窗口等)怎么样?
-亚当
答案1
如果您运行 NTP 守护程序,则不会遇到此问题,它会加快/减慢您的时钟,使其随着时间的推移而同步,而不是跳跃。
答案2
据我所知,计划的作业不应被跳过或运行两次。
Cron 使用事件列表进行调度,因此如果时间向前跳动,cron 将只看到该作业未按时运行,并在下一个唤醒周期运行它。如果时间向后跳动,该作业将从事件列表中删除,并且 cron 将不会认为它需要再次运行。
正如 Tjofras 提到的,ntpd 将使用漂移而不是硬跳跃来逐渐调整您的时钟,因此,除非您手动更改系统时钟,否则您通常不会看到时间跳跃。
答案3
这取决于您所说的 NTP 是什么意思。如果您运行的 NTP 时间同步守护程序 (ntpd) 具有合理的配置,则时间永远不会跳跃。守护程序会持续将系统时间向实际时间倾斜。它不会以间隔“运行”:它会以间隔查询其时间源,以确定要倾斜多少时间。您永远不会看到跳过的时间,您的时间也不会以任何可察觉的方式向后移动。
但是,如果您通过其他方式进行同步,时间就会跳跃。例如,如果您使用 cron 作业来运行ntpdate
或ntpd -q
(除非您有充分的理由并且了解可能产生的严重后果,否则您不应该这样做),那么您的系统时间可能会在每次运行时立即发生巨大变化。当您第一次启动 ntpd 时,时间也可能会跳跃,具体取决于您的配置方式。
关于 Cron:
如果由于时间跳跃而导致 cron 作业应该运行的准确时间没有发生(被跳过),那么它就不会运行。它将在计划的下一个间隔运行。
如果 cron 作业应该运行的确切时间出现两次(时间向后跳转),那么它将运行两次。
要解决 cron 问题,请将 ntpd 作为服务/守护程序运行,从而确保您的时间永远不会跳跃。如果您手动跳跃时间,则必须检查所有 cron 作业以确定哪些未运行(或将运行两次)并手动干预。
当然,最好的解决方案是解决时间问题。cron 问题只是更严重的时间跳跃问题的一个症状,它可能导致除 cron 之外的各种问题(日志记录、审计、SELinux 等...)
答案4
正如其他人提到的,运行 ntpd 可以避免此问题,但是如果您因时间跳跃而遇到问题,则可以使用 anacron。它专为计算机不是 24/7 全天候运行并尽快运行作业而设计,但我不明白为什么它在您描述的情况下不起作用。