我希望我的 ntpd 能够更频繁、更快速地更新时间

我希望我的 ntpd 能够更频繁、更快速地更新时间

我正在尝试配置 ntpserver 和客户端。我应该怎么做才能让 ntpd 更频繁、更快速地同步时间?当我手动更改客户端中的时间,然后重新启动 ntpd 服务时,16 秒后时间同步。但是当我再次更改时间而不重新启动 ntpd 服务或重新启动服务器时,需要 15 到 16 分钟才能同步时间。我希望 ntpd 每 16 或 20 秒检查一次时间。

ntp 服务器:192.168.135.130 ntp 客户端:192.168.135.131

##server config###

driftfile` /var/lib/ntp/drift
restrict default nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict ::1
restrict time.google.com mask 255.255.255.245 nomodify notrap noquery
server time.google.com
restrict 192.168.135.0 mask 255.255.255.0
############################################################

 ##client config##

driftfile /var/lib/ntp/drift
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict ::1
server 192.168.135.130 iburst burst minpoll 4 maxpoll 4
logfile /var/log/ntp.log
logconfig all
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
###########################################################
##drift file##
-12.298

答案1

我认为你的行为存在根本性的误解。

ntpd 旨在始终运行,并在运行时将时间保持在参考时钟的微秒范围内。它不会每 15-20 分钟轮询一次时间服务器并更正时间;它始终在运行。

我怀疑您看到的是 ntpd 的正确行为。守护进程启动时,它会调整(大幅更改)时钟以将其更正为源时钟,可能是因为它配置为允许该行为作为一次性更改,但仅在启动时进行(否则可能需要很长时间才能收敛到正确的时间,例如,如果计算机启动时时钟显示 1970 年 1 月 1 日)。

启动后,ntpd 大部分时间都配置为从不步进(大幅更改)时钟。相反,它会缓慢(逐渐更改)时钟,直到它正确/同步,这样您计算机上运行的应用程序就不会受到负面影响(例如,cron 脚本无法运行,因为您只是跳过了今天凌晨 1 点)。我认为这就是您在 ntpd 运行时手动设置时间时看到的情况。

如果您以这种方式运行 ntpd,您的计算机上就永远不会出现错误的(偏差超过微秒)时钟,而且您永远不必自己设置/更改时间;这就是 ntpd 的运行方式。

您可能更习惯于另一种环境,即您希望定期通过网络同步时钟,本质上是通过询问另一台计算机:“现在几点了?”并将时钟设置为答案。这有两个挑战,其中一个是您注意到的(如果时钟出现偏差,可能需要一些时间才能纠正),另一个是您的时钟将比使用 ntpd 时更不准确(您的计算机和时间服务器之间的延迟可能会以毫秒为单位)

我希望这些信息对你有用。

答案2

您可能混淆了两个事物——NTP 客户端和服务器。

NTP 客户端定期与服务器同步,您可以使用 cron 将同步频率设置为更高(例如使用 ntpdate)。听起来这就是您想要做的。

NTP 服务器(即您上面描述的服务器)运行起来要复杂得多,启动起来也很慢。这是因为它连接到多个其他服务器,并且非常努力地保持准确,甚至考虑了延迟和延迟变化。因此,它需要很长时间才能启动。

一般来说,较小的组织会使用可通过互联网访问的 NTP 服务器,但较大的组织或需要更高精度的组织将运行 1 个 ntp 服务器并将客户端指向该服务器,以减少由延迟变化导致的不准确性并减轻其他服务器的压力。

编辑

您可能需要运行一个简单的脚本(如后台运行的脚本)来保持时钟同步(但我不喜欢这个解决方案)

#! /bin/bash

NTPSERVER=clock.isc.org
SECS=20

while [ 1 ]
do
     /usr/sbin/ntpdate $NTPSERVER
     sleep $SECS
done

假设您将此文件保存在 /usr/local/bin/keeptime 中 -

chmod 755 /usr/local/bin/keeptime 

将使其可执行并添加

在 /usr/local/bin/keeptime &

/etc/rc.local 顶部附近(取决于您的发行版)将在后台运行它。

相关内容