如何检查 NTP 是否调整了 Linux 上的系统时间?

如何检查 NTP 是否调整了 Linux 上的系统时间?

我有一台机器在运行一些实时内容时遇到了一些问题。我得到的一个线索是 NTP 守护程序可能移动了时间,从而导致错误超时。

我如何才能知道 NTP 守护进程是否确实移动了时间?有日志吗?我确实在 /var/log/messages 中看到 NTP 守护进程重新启动,但我不知道是否也应该在那里进行时间调整。

澄清一下:我需要从事件发生后的日志中了解情况。可能是在时间调整后的 2 天。运行命令查看当前状态没有帮助。

答案1

您可以使用ntpdc -c sysinfo命令查询 ntpd 状态。它返回类似如下的输出:

system peer:          0.0.0.0
system peer mode:     unspec
leap indicator:       11
stratum:              16
precision:            -20
root distance:        0.00000 s
root dispersion:      338.44917 s
reference ID:         [73.78.73.84]
reference time:       00000000.00000000  Thu, Feb  7 2036  8:28:16.000
system flags:         auth monitor ntp kernel stats
jitter:               0.000000 s
stability:            0.000 ppm
broadcastdelay:       0.003998 s
authdelay:            0.000000 s

答案2

漂移文件(/var/lib/ntp/drift)才不是根据联系的时间服务器测量本地时间与 ntpd 计算的时间之间的差值。

相反,它是本地时钟的估计漂移(频率误差)(以 ppm 为单位)。该值由 ntpd 每小时更新一次,并且不会随着时间的推移而减少。

据我所知,ntpd 在重启后使用该值来估计本地时钟的错误程度(即使机器关闭,本地时钟仍会运行)。

例如:文件内容:5 机器已断电 1 天(86400 秒)86400 的 5 ppm 为 0.432 => 本地时钟为“未来”的 0.432 秒

要点如下: - ntpd 现在可以在启动后立即对本地时间 (-0.432 秒) 进行第一次近似校正 - ntpd 立即知道本地时钟的误差程度(在此示例中为:5 ppm)

(我无权对 Sirex 的评论发表评论,因此我添加了一条新评论)

答案3

ntpq -nc peers将显示您与所有同行的同步状态。

答案4

尽管建议阅读NTP 常见问题解答(即使最近可能没有更新),我想更新https://superuser.com/a/181348/964771

由于当前版本禁用了私有ntpdc协议(因为可能存在放大攻击),您应该使用ntpqntpq已经得到增强并且sysinfo也知道命令:

# ntpq -nc sysinfo
associd=0 status=0615 leap_none, sync_ntp, 1 event, clock_sync,
system peer:        [2003:ee:2f02:8800:cece:1eff:fec8:f98f]:123
system peer mode:   client
leap indicator:     00
stratum:            4
log2 precision:     -25
root delay:         18.625
root dispersion:    47.180
reference ID:       195.81.109.67
reference time:     e8d6d32d.73b8521b  Sun, Oct 15 2023 23:07:57.452
system jitter:      0.000000
clock jitter:       29.838
clock wander:       5.124
broadcast delay:    -50.000
symm. auth. delay:  0.000

另一个有用的命令是“读取列表”(rl):

# ntpq -nc rl
associd=0 status=0615 leap_none, sync_ntp, 1 event, clock_sync,
version="ntpd [email protected] Wed Jun  7 12:00:00 UTC 2023 (1)",
processor="x86_64", system="Linux/5.14.21-150500.55.28-default", leap=00,
stratum=4, precision=-25, rootdelay=18.625, rootdisp=49.100,
refid=195.81.109.67,
reftime=e8d6d32d.73b8521b  Sun, Oct 15 2023 23:07:57.452,
clock=e8d6d435.8a3ce64f  Sun, Oct 15 2023 23:12:21.539, peer=4544, tc=7,
mintc=3, offset=-16.434911, frequency=-1.411, sys_jitter=0.000000,
clk_jitter=29.838, clk_wander=5.124

可能最重要的位是字符串clock_syncsync_ntp)和offsetrootdisproot dispersion)提供一般的质量指标:值越低,质量越好(简单来说)。

最后,RFC 8633(网络时间协议最佳当前实践)也可能是一种有用的资源。

最后,但并非最不重要的一点是,支持 NTP 时间接口的 UNIX 系统(如 Linux)可以使用以下命令显示内核时钟的同步状态ntptime

# ntptime 
ntp_gettime() returns code 0 (OK)
  time e8d6d6eb.21a58710  Sun, Oct 15 2023 23:23:55.131, (.131432979),
  maximum error 533452 us, estimated error 29838 us, TAI offset 0
ntp_adjtime() returns code 0 (OK)
  modes 0x0 (),
  offset -386.699 us, frequency -1.411 ppm, interval 1 s,
  maximum error 533452 us, estimated error 29838 us,
  status 0x2001 (PLL,NANO),
  time constant 6, precision 0.001 us, tolerance 500 ppm,

这里的返回值(OK)和status(尽管来自estimated error)很重要:如果返回值或状态指示“TIME_ERROR”或“0x41”,则需要分析一个问题。

相关内容