我的 Linux 服务器的时间同步有问题。这台机器和 NTP 服务器都位于(较小的)大学数据中心,因此是本地地址。
奇怪的是该ntpdate
命令有效:
ntpdate -u 172.16.0.25
输出:
17 Jan 15:03:53 ntpdate[25993]: adjust time server 172.16.0.25 offset 0.036043 sec
但是,chronyd
没有(它只是挂起):
chronyd -q 'server 172.16.0.25 iburst'
我正在尝试所有方法来设置自动时间同步,ntpd
但没有成功,最后求助于chrony
但仍然无法弄清楚。
这是发生了什么事ntpd
。我使用https://vitux.com/how-to-setup-ntp-server-and-client-on-debian-10ntpdate
上的说明进行安装。conf文件有一个命令
server 172.16.0.25 prefer iburst
而系统状态ntp报告
Jan 18 10:26:11 akulab1 ntpd[26957]: kernel reports active service TIME_ERROR: 0x41: Clock Unsynchronized
具有以下ntpq -p
输出
HKS-SRV01.unica .LOCL. 1 u 9 64 15 0.557 2275.65 9.515 –
但是,一段时间后,服务报告
Jan 18 10:31:01 akulab1 ntpd[26957]: ntpd exiting on signal 15 (Terminated)
因为 NTP 同步没有成功。但是,ntpdate -u 172.16.0.25 报告同步:18 Jan 10:33:13 ntpdate[26990]: step time server 172.16.0.25 offset 2.282101 sec(如果我没记错的话......) – ksonofre 7 分钟前
这是我的/etc/ntp.conf
文件:
driftfile /var/lib/ntp/ntp.drift
leapfile /usr/share/zoneinfo/leap-seconds.list
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
server 172.16.0.25 prefer iburst
restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited
restrict 127.0.0.1
restrict ::1
restrict source notrap nomodify noquery
我再次重新启动了 NTP 服务:systemctl restart ntp
的输出ntpq -np
如下:
root@akulab1:~# ntpq -np
remote refid st t when poll reach delay offset jitter
==============================================================================
172.16.0.25 .LOCL. 1 u 63 64 377 0.518 104.685 14.815
但是,服务 ( systemctl status ntp
) 仍然报告:
Jan 18 11:04:10 akulab1 ntpd[27089]: kernel reports TIME_ERROR: 0x4041: Clock Unsynchronized
而且,在我设置timedatectl set-ntp true
NTP 服务后,它会简单地关闭,即报告不活动。
我再次重新启动了 ntpd 服务并且它处于活动状态。此外,我已经等了一个多小时进行同步,但它从来没有得到它(服务器地址前面没有星号或加号) - 这是输出ntpq -np
:
remote refid st t when poll reach delay offset jitter
==============================================================================
172.16.0.25 .LOCL. 1 u 61 64 377 0.588 269.847 14.797
此外,这是ntpdate -qu
命令的输出:
18 Jan 13:57:44 ntpdate[1975]: no servers can be used, exiting
好的,上面的命令不完整,所以ntpdate -qu 172.16.0.25
有以下输出:
server 172.16.0.25, stratum 1, offset 0.435131, delay 0.02621
18 Jan 14:51:56 ntpdate[6951]: adjust time server 172.16.0.25 offset 0.435131 sec
并ntpq -np
给出以下内容:
remote refid st t when poll reach delay offset jitter
==============================================================================
172.16.0.25 .LOCL. 1 u 17 64 377 0.554 436.092 14.279
解决方案在下面接受的答案中给出。我假设时间同步现在正在工作,但我仍然会跟踪时钟漂移并更新我的问题,如果它没有正确同步。
最终解决方案发布在这篇文章中:ntp server reachable but never select/set the time
你的时钟几乎肯定是同步的。“时钟未同步”具有误导性,因为它仅适用于
ntpd
等待与其上游源同步时。NTP 有两条路由:
systemd
一条(通过 管理timedatectl
)和ntpd
一条(通过 监控ntpq
)。我建议你timedatectl
一个人离开。您应该会看到列出的上游,最初的可达性为 0,在大约五分钟的时间内奇怪地增加到 377。它应该
+
在左侧列中显示它是时间同步的候选者,并更改为*
最终被接受的时间。延迟和偏移字段以毫秒为单位。在你的大学 WAN 中,我希望延迟很低,500ns 非常好。在数小时和数天内,偏移量应趋于零。
这是我的服务器中一个稳定示例的摘录。37ms 的延迟对于 xDSL 线路来说是合理的。来自上行服务器的偏移量非常低,并且抖动是可以忍受的:
sysinfo
您可以使用 NTP 的命令查看同步状态。在这里,我们正在查看第一行输出;注意sync_ntp
,它的存在确认我的客户端与上游服务器同步:最后的警告。当您有服务试图保持时间正确时,不要更改本地系统的时间,这一点很重要。该服务会注意到时间的变化,并假设本地时钟不能保持正确的时间。然后它会非常努力地纠正时钟,最终可能会导致它严重摆动,本地时钟无法再与上游同步。请参阅NTPD 多久(以及何时)更新时间?
如果发生这种情况,您将需要等待(很长时间)让 NTP 注意到或自行修复。您可以通过禁用和停止 ntpd (
systemctl stop ntp; systemctl disable ntp
) 自行修复它,然后删除/etc/adjtime
并立即重新启动。(您可能需要两次执行此删除/重新启动步骤。)然后使用ntpdate -u 51.155.16.62
正确设置时间并再次重新启动。最后,重新启用 NTP (systemctl enable ntp; systemctl start ntp
)。如果您已
ntpdate
安装,您可以使用ntpdate -qu {server}
. 请勿在ntpd
运行时尝试设置时间。其他参考资料