我有一台机器在运行一些实时内容时遇到了一些问题。我得到的一个线索是 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
协议(因为可能存在放大攻击),您应该使用ntpq
。
ntpq
已经得到增强并且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_sync
(sync_ntp
)和offset
。
rootdisp
(root 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”,则需要分析一个问题。