首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >自动时间同步:“`ntpdate`”工作,但“time”不工作

自动时间同步:“`ntpdate`”工作,但“time”不工作
EN

Unix & Linux用户
提问于 2022-01-17 14:18:28
回答 1查看 2.3K关注 0票数 2

我的Linux服务器的时间同步有问题。这台机器和NTP服务器都位于(较小的)大学数据中心,因此是本地地址。

奇怪的是,ntpdate命令可以工作:

代码语言:javascript
运行
复制
ntpdate -u 172.16.0.25

产出如下:

代码语言:javascript
运行
复制
17 Jan 15:03:53 ntpdate[25993]: adjust time server 172.16.0.25 offset 0.036043 sec

但是,chronyd没有(它只是挂起):

代码语言:javascript
运行
复制
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文件有一个命令

代码语言:javascript
运行
复制
server 172.16.0.25 prefer iburst

当系统状态ntp报告

代码语言:javascript
运行
复制
Jan 18 10:26:11 akulab1 ntpd[26957]: kernel reports active service TIME_ERROR: 0x41: Clock Unsynchronized

ntpq -p具有以下输出

代码语言:javascript
运行
复制
HKS-SRV01.unica .LOCL.           1 u    9   64   15    0.557  2275.65   9.515 – 

然而,过了一段时间,服务报告

代码语言:javascript
运行
复制
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文件:

代码语言:javascript
运行
复制
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的输出如下:

代码语言:javascript
运行
复制
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)仍然报告:

代码语言:javascript
运行
复制
Jan 18 11:04:10 akulab1 ntpd[27089]: kernel reports TIME_ERROR: 0x4041: Clock Unsynchronized

而且,在我设置timedatectl set-ntp true之后,NTP服务就会关闭,即报告无效。

我已经重新启动了ntpd服务,并且它是活动的。另外,我已经等待了一个多小时才得到同步,但它从未实现过同步(服务器地址前面没有星星或加号)--以下是ntpq -np的输出:

代码语言:javascript
运行
复制
     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命令的输出:

代码语言:javascript
运行
复制
18 Jan 13:57:44 ntpdate[1975]: no servers can be used, exiting

好的,上面的命令没有完成,所以在ntpdate -qu 172.16.0.25中有以下输出:

代码语言:javascript
运行
复制
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给出了以下内容:

代码语言:javascript
运行
复制
     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服务器,但从不选择/设置时间

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2022-01-18 10:56:45

你的时钟几乎肯定是同步的。“时钟不同步”是误导性的,因为它只适用于ntpd正在等待与其上游源同步。

NTP有两条路由:systemd 1(通过timedatectl管理)和ntpd 1(通过ntpq监视)。我建议你离timedatectl远点。

代码语言:javascript
运行
复制
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的延迟感觉是合理的。与上行服务器的偏移量非常低,抖动是可以承受的:

代码语言:javascript
运行
复制
     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,它的存在确认了我的客户端与上游服务器同步:

代码语言:javascript
运行
复制
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运行时设置时间。

附加参考资料

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/686714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档