如果 NTP 在 10:59:55 运行,并将时间固定为 11:00:13,那么 chron 是运行 11:00:00 和 *:00:00 任务,还是跳过它们?
或者,如果 NTP 在 11:00:00 运行并将时间固定为 10:59:48,这些任务会运行两次吗?
如果它们被跳过,有什么方法可以解决这个问题?
其他调度程序(窗口等)呢?
-亚当
如果 NTP 在 10:59:55 运行,并将时间固定为 11:00:13,那么 chron 是运行 11:00:00 和 *:00:00 任务,还是跳过它们?
或者,如果 NTP 在 11:00:00 运行并将时间固定为 10:59:48,这些任务会运行两次吗?
如果它们被跳过,有什么方法可以解决这个问题?
其他调度程序(窗口等)呢?
-亚当
如果您运行 NTP 守护程序,您将不会遇到此问题,它会加快/减慢您的时钟,因此它会随着时间的推移而同步,而不是跳跃。
据我了解,不应跳过或运行两次计划的作业。
Cron 使用事件列表进行调度,因此如果时间提前,cron 将简单地看到该作业没有按时运行,并在下一个唤醒周期中运行它。如果时间倒退,则该作业将从事件列表中删除,并且 cron 不会将其视为需要再次运行。
正如 Tjofras 所提到的,ntpd 将使用漂移而不是硬跳来逐渐调整您的时钟,因此除非您自己手动更改系统时钟,否则您通常不会看到时间跳跃。
这取决于您所说的NTP。如果您以合理的配置运行 NTP 时间同步守护程序 (ntpd),则时间永远不会跳跃。守护程序不断地将系统时间调整为实际时间。它不会每隔一段时间“运行”:它会每隔一段时间查询它的时间源,只是为了确定要减少多少时间。您将永远不会看到跳过的时间,您的时间也不会以任何可察觉的方式倒退。
但是,如果您通过某些其他方式进行同步,时间将会跳跃。例如,如果您使用 cron 作业来运行
ntpdate
或ntpd -q
(除非您有充分的理由并了解可能的可怕后果,否则您不应该这样做),那么您的系统时间可能会在每次运行时瞬间发生巨大变化。当你第一次启动 ntpd 时,时间也可能会跳跃,这取决于你如何配置它。关于 Cron:
如果 cron 作业应该运行的确切时间由于时间跳跃而没有出现(被跳过),那么它根本不会运行。它将在预定的下一个间隔运行。
如果 cron 作业应该运行的确切时间出现两次(时间向后跳),那么它将运行两次。
要解决 cron 问题,请将 ntpd 作为服务/守护程序运行,从而确保您的时间永远不会跳跃。如果您手动跳过时间,则必须检查所有 cron 作业以确定哪些未运行(或将运行两次)并手动干预。
当然,最好的解决办法是解决时间问题。cron 问题只是更严重的时间跳跃问题的症状,它可能导致 cron 之外的各种问题(日志记录、审计、SELinux 等......)
如果时间改变,我已经看到 Windows 中的 Backup Exec 作业会触发。当时间倒退一小时时,他们尤其不喜欢。
正如其他人所提到的,运行 ntpd 可以防止这个问题,但是如果你因为时间跳过而出现问题,你可以使用 anacron。它设计用于当计算机没有 24/7 运行并尽快运行作业时使用,但我不明白为什么它在您描述的情况下不起作用。