强制ntpd以较小的步骤进行更改

NTP文档说:

在正常情况下,ntpd以小步调整时钟,以使时间刻度有效连续且没有不连续性 – http://doc.ntp.org/4.1.0/ntpd.htm

但是,这实际上并不是我在实践中注意到的。 如果我手动将系统时间向后或向前改变5或10秒,则启动ntpd ,我注意到它一次调整时钟。

例如,用这个代码:

 #!/usr/bin/env python import time last = time.time() while True: time.sleep(1) print time.time() - last last = time.time() 

当我第一次改变的时候,我会注意到这样的事情:

 1.00194311142
 8.29711604118
 1.0010509491

那么当我开始NTPd,我会看到像这样的东西:

 1.00194311142
 -8.117301941
 1.0010509491

有没有办法迫使ntpd在较小的步骤进行调整?

启动守护进程时传递ntpd -x会使更改保持非常小:不会有时钟步进。 当然,设置回转只意味着如果你的时钟从正确的时间开始,可能需要一些时间来纠正较大的差距。 从手册页引用几段

在普通条件下,ntpd以小步调整时钟,以使时间刻度有效连续且没有不连续性。 在networking拥塞严重的情况下,往返时延抖动可能会超过3秒,同步距离等于往返时延加误差预算项的一半,可能会变得非常大。 ntpdalgorithm会丢弃超过128 ms的采样偏移量,除非采样偏移量小于128 ms的时间间隔超过900 s。 之后的第一个样本,无论偏移量如何,将时钟分步到指定的时间。 实际上,这将时钟错误地误报的误报率降低到了极低的发生率。

既然你把时钟调整了10秒,你肯定已经超过了NTP期待看到的领域,从而迈出了步伐。

由于这种行为,一旦设置了时钟,即使在极端的networkingpath拥塞和抖动的情况下,也很less超过128毫秒。 有时候,特别是当第一次启动ntpd时,错误可能会超过128毫秒。 如果相对于服务器将来的本地时钟时间超过128s,则有时会导致时钟倒退。 在某些应用程序中,这种行为可能是不可接受的。 如果命令行中包含-x选项,则时钟将不会被分步执行,只会使用旋转校正。

在决定使用-x选项之前,应仔细研究这些问题。 由于NTP协议和algorithmdevise所依据的正确性原则,可能的最大压摆率限于500百万分率(PPM)。 因此,本地时钟可能需要很长时间才能收敛到一个可接受的偏移量,每秒约有2000秒钟的时间超出了可接受的范围。 在此期间,本地时钟将不会与任何其他networking时钟一致,并且系统不能用于需要正确同步networking时间的分布式应用程序。

在启动主要服务之前运行ntpdate ,然后运行ntpd -x可能是一个很好的组合解决scheme,以确保在需要执行无步骤计时之前执行任何主要步骤。

如果这是你想要写的代码,这可能是你正在寻找的答案: https : //stackoverflow.com/questions/1205722/how-do-i-get-monotonic-time-durations-in-python