我的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报告了同步:1月18日10:33:13 ntpdate26990:步骤时间服务器172.16.0.25偏移了2.282101秒(如果我没有弄错的话)-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服务器,但从不选择/设置时间
发布于 2022-01-18 10:56:45
你的时钟几乎肯定是同步的。“时钟不同步”是误导性的,因为它只适用于ntpd
正在等待与其上游源同步。
NTP有两条路由:systemd
1(通过timedatectl
管理)和ntpd
1(通过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,奇怪地在大约5分钟内增加到377。它应该在左边的列中有一个+
,以显示它是时间同步的候选对象,在它最终被接受时改为*
。
延迟和偏移字段以毫秒为单位进行测量。在你们大学的广域网上,我希望延迟的时间会很短,而500 is是非常好的。在几个小时和几天内,抵消应趋向于零。
下面是我的服务器中一个稳定示例的摘录。对于xDSL线路来说,37 an的延迟感觉是合理的。与上行服务器的偏移量非常低,抖动是可以承受的:
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
您可以使用NTP的sysinfo
命令查看同步状态。在这里,我们将查看第一行输出;注意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
运行时设置时间。
附加参考资料
https://unix.stackexchange.com/questions/686714
复制相似问题