![WSL2 / 22.04 上的 timesyncd / ntp 问题](https://linux22.com/image/1201429/WSL2%20%2F%2022.04%20%E4%B8%8A%E7%9A%84%20timesyncd%20%2F%20ntp%20%E9%97%AE%E9%A2%98.png)
我在 Windows 10 / WSL2 上运行 Ubuntu 22.04 LTS。我使用的是 bash,而不是桌面。
我正在使用计算机运行 ADS-B 接收器,将飞机位置上传到 flightradar24 和 flightaware。flightradar24 软件与 timesyncd 发生冲突,无法维持系统时间。
以下是来自 flightradar24 的日志:
Apr 23 19:14:54 kaveri fr24feed[2512813]: [time][w]Time jumped forward by 1.51s, resynchronizing
Apr 23 19:14:54 kaveri fr24feed[2512813]: [time][i]Synchronizing time via NTP
Apr 23 19:14:54 kaveri fr24feed[2512813]: [time][i]Time synchronized correctly, offset -0.070 seconds, drift +0.000 seconds/minute
Apr 23 19:14:56 kaveri fr24feed[2512813]: [feed][i]sent 7,0 AC
Apr 23 19:15:02 kaveri fr24feed[2512813]: [feed][i]sent 5,0 AC
Apr 23 19:15:07 kaveri fr24feed[2512813]: [feed][i]sent 6,0 AC
Apr 23 19:15:08 kaveri fr24feed[2512813]: [time][w]Time jumped forward by 1.47s, resynchronizing
Apr 23 19:15:09 kaveri fr24feed[2512813]: [time][i]Synchronizing time via NTP
Apr 23 19:15:09 kaveri fr24feed[2512813]: [time][i]Time synchronized correctly, offset -0.080 seconds, drift -0.000 seconds/minute
Apr 23 19:15:11 kaveri fr24feed[2512813]: [feed][i]sent 6,0 AC
Apr 23 19:15:16 kaveri fr24feed[2512813]: [feed][i]sent 5,0 AC
Apr 23 19:15:21 kaveri fr24feed[2512813]: [feed][i]sent 5,0 AC
目前,偏移量相对较小,但有时可能会有 30-40 秒。我还在 flightaware 软件中看到了这种影响,因为它报告时间不稳定。据了解,flightradar24 软件的 ntp 实现存在问题,可能是因为它试图集中设置时间,而不是本地设置时间。
我尝试使用 timesyncd 修复此问题,但没有成功,因此我尝试安装 ntpd。但也没有成功。
最初,timesyncd 不会同步到 ntp。由于在 wsl2 上运行 Ubuntu,我不得不覆盖默认配置。(我在网上找到了这个覆盖。)
user@kaveri:/etc/systemd/system/systemd-timesyncd.service.d$ cat override.conf
[Unit]
ConditionVirtualization=
ConditionVirtualization=wsl
上述覆盖使 timesyncd 能够正确启动并同步到 ntp。
以下是 timesyncd 的其余配置:
user@kaveri:/etc/systemd$ cat timesyncd.conf
[Time]
NTP=pool.ntp.org
FallbackNTP=ntp.ubuntu.com
RootDistanceMaxSec=5
PollIntervalMinSec=16
PollIntervalMaxSec=2048
我暂时使用pool.ntp.org进行测试。我将PollIntervalMinSec减少到16,以便更频繁地同步时间。flightradar24软件识别出时间差异并再次“纠正”。
以下是 timedatectl 的状态:
user@kaveri:/etc/systemd$ timedatectl
Local time: Tue 2024-04-23 21:10:14 PDT
Universal time: Wed 2024-04-24 04:10:14 UTC
RTC time: Wed 2024-04-24 04:35:58
Time zone: America/Los_Angeles (PDT, -0700)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
根据输出,它正在与 ntp 同步。(您还可以看到 RTC 运行得更快。它运行得更快。)如果我重复此命令,我可以看到时间前后跳跃,显然是由于 flightradar24 错误地设置了时间,而 timesyncd 更正了时间。
以下是 systemd-timesyncd 的状态:
user@kaveri:/etc/systemd$ systemctl status systemd-timesyncd
● systemd-timesyncd.service - Network Time Synchronization
Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/systemd-timesyncd.service.d
└─override.conf
Active: active (running) since Mon 2024-04-22 14:08:14 PDT; 1 day 7h ago
Docs: man:systemd-timesyncd.service(8)
Main PID: 2705070 (systemd-timesyn)
Status: "Initial synchronization to time server 162.159.200.123:123 (pool.ntp.org)."
Tasks: 2 (limit: 8887)
Memory: 1.3M
CGroup: /system.slice/systemd-timesyncd.service
└─2705070 /lib/systemd/systemd-timesyncd
Notice: journal has been rotated since unit was started, output may be incomplete.
再次,这似乎证实它与pool.ntp.org同步。
以下是 ntpdate -q 的输出:
user@kaveri:/etc/systemd$ sudo ntpdate -q pool.ntp.org
server 162.159.200.1, stratum 3, offset -0.234421, delay 0.02872
server 103.144.177.88, stratum 2, offset -0.255933, delay 0.08658
server 173.183.146.26, stratum 2, offset -0.273642, delay 0.04372
server 198.50.174.203, stratum 2, offset -0.295076, delay 0.09995
23 Apr 21:12:35 ntpdate[3606934]: adjust time server 173.183.146.26 offset -0.273642 sec
如果我理解正确的话,计算机与pool.ntp.org的偏移量仅为~0.27秒。
这是 timedatectl timesync-status:
user@host:/etc/systemd$ timedatectl timesync-status
Server: 162.159.200.123 (pool.ntp.org)
Poll interval: 16s (min: 16s; max 34min 8s)
Leap: normal
Version: 4
Stratum: 3
Reference: A45085C
Precision: 1us (-25)
Root distance: 17.432ms (max: 5s)
Offset: -8.477243s
Delay: 3.402ms
Jitter: 9.165ms
Packet count: 19241
Frequency: +0.000ppm
报告的偏移量为 ~8.4 秒。这是在重新启动 systemd-timesyncd 后以及执行 ntpdate pool.ntp.org 后获取的。
要么是我对某事感到困惑,要么是 timesyncd 报告了与 ntpdate 不一致的偏移量。我不明白这是怎么回事,因为它们都使用pool.ntp.org。
为了尝试解决这个问题,我尝试在计算机上安装 ntp。我关闭了 flightradar24 和 flightaware 服务,这样它们就不会干扰 ntpd 同步时钟。正如我上面所说,RTC 运行速度比它应该的快得多(不知道为什么),所以在启动 ntpd 之前,我使用 ntpdate pool.ntp.org 设置了时间,并使用 hwclock -w 设置了 RTC。然后我立即启动了 ntpd。它运行了一段时间,然后失败并显示一条消息ntpd frequency error -18564 PPM exceeds tolerance 500 PPM
。这是否意味着 RTC 不够准确,无法使 ntpd 正常工作?
我希望了解 timesyncd 和 ntpd 的人可以帮助我解决这个问题。