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

Dav*_*ver 5 linux 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()
Run Code Online (Sandbox Code Playgroud)

当我第一次更改时间时,我会注意到以下内容:

1.00194311142
8.29711604118
1.0010509491

然后当我启动 NTPd 时,我会看到如下内容:

1.00194311142
-8.117301941
1.0010509491

有没有办法强制ntpd以较小的步骤进行调整?

Jef*_*and 8

ntpd -x启动守护进程时传递将保持非常小的变化:不会有时钟步进。当然,设置回转仅意味着如果您的时钟与正确时间相差很远,则可能需要一段时间来校正较大的间隙。引用手册页中的几段

在一般情况下,ntpd 会以小步长调整时钟,从而使时间刻度有效地连续且没有间断。在极端网络拥塞的情况下,往返延迟抖动可以超过三秒,并且等于往返延迟加误差预算项的二分之一的同步距离会变得非常大。ntpd 算法会丢弃超过 128 ms 的样本偏移,除非没有样本偏移小于 128 ms 的时间间隔超过 900 秒。之后的第一个样本,无论偏移量如何,都会将时钟步进到指定的时间。在实践中,这将时钟出现错误的误报率降低到极低的发生率。

由于您将时钟调整了 10 秒,您绝对超出了 NTP 期望看到的范围,因此步进。

由于这种行为,一旦设置时钟,即使在网络路径拥塞和抖动的极端情况下,它也很少偏离超过 128 毫秒。有时,尤其是首次启动 ntpd 时,错误可能会超过 128 毫秒。如果本地时钟时间在未来相对于服务器超过 128 秒,这有时可能会导致时钟向后设置。在某些应用程序中,这种行为可能是不可接受的。如果命令行中包含 -x 选项,则永远不会步进时钟,只会使用回转校正。

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

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