有没有办法让ntpd迭代查询ntp.conf文件中给出的服务器地址?

假设机器有一个如下所示的ntp.conf文件:

path-to-drift-file < path-to-drift-file >
服务器< NTP-server-1 >
服务器< NTP-server-2 >
服务器< NTP-server-2 >

出于某种原因,让我们说,NTP服务器没有运行在第一个查询所有服务器。 我们可以让ntpd重申查询这些来源(即再次咨询server-1到服务器-3在循环中)? 我们该怎么做呢?

编辑:有没有什么办法来定量确定哪台服务器造成实际时间同步从机器ntp.conf中给出的服务器列表?

/etc/ntp.conf中所有定义的服务器用于同步时间。 没有必要通过服务器“循环”,因为algorithm已经处理了多个来源。

ntpd程序通过以指定轮询间隔与一个或多个configuration的服务器交换消息来运行。

来自: man ntpd

你可以通过在命令行上执行ntpq -p来看到这一点,以显示你的同行和他们的状态。

您可能会看到如下所示的输出:

  remote refid st when poll reach delay offset disp ======================================================================== +128.4.2.6 132.249.16.1 2 131 256 373 9.89 16.28 23.25 *128.4.1.20 .WWVB. 1 137 256 377 280.62 21.74 20.23 -128.8.2.88 128.8.10.1 2 49 128 376 294.14 5.94 17.47 +128.4.2.17 .WWVB. 1 173 256 377 279.95 20.56 16.40 

输出也在手册页中解释。 但是,随着时间的推移我收集了一些笔记

远程 :在ntp.conf文件中指定的同伴
* =当前时间源
#=源select,距离超过最大值
o =所选源,每秒脉冲数(PPS)
+ =源选中,包含在最终集合中
x =源虚假股票
。 =从候选列表的末尾select的源
– =集群algorithm丢弃的源
空白=源丢弃高层,失败的理智

refid :远程源的同步源

阶层 :来源的阶层层面

t :types可用
l =本地(如GPS,WWVB)
u =单播(最常见)
m =组播
b =广播
– = netaddr

何时 :自上次响应以来经过的秒数

轮询 :以秒为单位的轮询时间间隔

达到 :表示成功/失败到达源,377所有尝试成功

delay :表示接收回复的往返时间(以毫秒为单位)

偏移量 :指示客户端服务器和源之间的时间差(以毫秒为单位)

disp / jitter :表示两个采样之间的差值,以毫秒为单位

最后,回答最后一个问题。

有没有什么办法可以从机器的ntp.conf中给出的服务器列表中定量确定哪个服务器导致了实际的时间同步?

用(*)表示的主机是您当前select的时间源。 这可以在投票期间改变。

Ntpd将在启动时查询所有已configuration的服务器,并select层级最低的服务器。 如果这个失败了,它会自动转到下一个服务器。 那么,为什么你想改变呢?

networking时间协议 – 时钟分层

编辑:在检查后,我发现有关iburst参数的一些信息,这实际上是为了加快时钟同步。 这里的区别是,它将使ntpd服务器退出时,它无法到达任何服务器。 你可能会滥用这个方法来确保一个ntpd的实例在任何时候都在运行,例如通过使用一个看门狗或一个由cron运行的简单脚本。

不幸的是,我无法弄清楚当没有服务器可达时ntpd的默认行为。 尽pipe我发现了很多关于当服务器不能在DNS中parsing(例如这个bug )或者当接口closures的时候它会如何performance的参考。