时间同步和计划任务

时间同步和计划任务

如果 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 作业来运行ntpdatentpd -q(除非您有充分的理由并且了解可能产生的严重后果,否则您不应该这样做),那么您的系统时间可能会在每次运行时立即发生巨大变化。当您第一次启动 ntpd 时,时间也可能会跳跃,具体取决于您的配置方式。

关于 Cron:

如果由于时间跳跃而导致 cron 作业应该运行的准确时间没有发生(被跳过),那么它就不会运行。它将在计划的下一个间隔运行。

如果 cron 作业应该运行的确切时间出现两次(时间向后跳转),那么它将运行两次。

要解决 cron 问题,请将 ntpd 作为服务/守护程序运行,从而确保您的时间永远不会跳跃。如果您手动跳跃时间,则必须检查所有 cron 作业以确定哪些未运行(或将运行两次)并手动干预。

当然,最好的解决方案是解决时间问题。cron 问题只是更严重的时间跳跃问题的一个症状,它可能导致除 cron 之外的各种问题(日志记录、审计、SELinux 等...)

答案4

正如其他人提到的,运行 ntpd 可以避免此问题,但是如果您因时间跳跃而遇到问题,则可以使用 anacron。它专为计算机不是 24/7 全天候运行并尽快运行作业而设计,但我不明白为什么它在您描述的情况下不起作用。

相关内容