![自动时间同步:`ntpdate` 有效,但 `chrony` 无效](https://linux22.com/image/201089/%E8%87%AA%E5%8A%A8%E6%97%B6%E9%97%B4%E5%90%8C%E6%AD%A5%EF%BC%9A%60ntpdate%60%20%E6%9C%89%E6%95%88%EF%BC%8C%E4%BD%86%20%60chrony%60%20%E6%97%A0%E6%95%88.png)
我的 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
。我ntpdate
按照以下说明进行安装https://vitux.com/how-to-setup-ntp-server-and-client-on-debian-10。 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 服务后,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 服务器可访问,但从未选择/设置时间
答案1
您的时钟几乎肯定是同步的。 “时钟不同步”具有误导性,因为它仅在ntpd
等待与其上游源同步时适用。
NTP 有两种路由:systemd
一种(通过 管理timedatectl
)和ntpd
一种(通过 监控ntpq
)。我建议你timedatectl
独自离开。
systemctl start ntp # don't restart ntpd if it was already running
watch -n1 ntpq -pn # while :; do clear; date; echo; ntpq -pn; sleep 1; done
您应该看到列出的上游,最初的可达性为 0,在大约五分钟的时间内奇怪地增加到 377。+
它的左侧栏中应该有一个 ,表明它是时间同步的候选者,更改为*
最终被接受的时间。
延迟和偏移字段以毫秒为单位测量。在您的大学 WAN 中,我预计延迟会很低,500 纳秒就非常不错了。在几小时和几天内,偏移量应趋于零。
这是我的服务器上的一个稳定示例的摘录。对于 xDSL 线路来说,37 毫秒的延迟感觉很合理。与上游服务器的偏移量出奇地低,并且抖动是可以忍受的:
remote refid st t when poll reach delay offset jitter
==============================================================================
*51.155.16.62 .GPS. 1 u 10 64 377 37.420 0.524 34.067
您可以使用NTPsysinfo
命令查看同步状态。在这里,我们正在查看输出的第一行; note sync_ntp
,它的存在确认我的客户端已与上游服务器同步:
ntpq -c sysinfo | head -n1
associd=0 status=0618 leap_none, sync_ntp, 1 event, no_sys_peer,
最后的警告。它是基本的当您有一个服务试图保持时间正确时,您不会更改本地系统的时间。该服务将注意到时间变化,并假设本地时钟无法保持正确时间。然后,它会非常努力地纠正时钟,最终可能会导致本地时钟无法再与上游同步。看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
运行时设置时间。
其他参考资料