我有一个机器人,正在使用 timemaster 启动 chrony 并从我的 GPS 添加 PTP 源。当我在无法获取卫星定位的室内启动机器人时,GPS 会声称现在是 1980 年 1 月 5 日。结果,我得到了一个选定的 0 层源,时间步进到 1980 年(因为我为 chrony 配置了“makestep 1 3”),然后当我将机器人带到室外并且 GPS 开始播报正确的时间时,它开始偏向 2021 年,当然它永远无法达到。chrony 源列表如下所示:
[root@robot user]# chronyc sources
210 Number of sources = 5
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
#x PTP0 0 2 377 4 +15173d[+15173d] +/- 8760us
^* ipv4.ntp1.rbauman.com 2 6 377 38 -43ms[ -15ms] +/- 134ms
^- 150.136.0.232 2 7 377 148 -59ms[ -31ms] +/- 192ms
^+ 38.229.58.9 2 8 377 216 +30ms[ +55ms] +/- 124ms
^+ ntp.speculation.org 2 7 377 38 -5919us[ +22ms] +/- 130ms
在捕获这些数据时,我正确设置了时间,因此您可以看到第一个来源偏离了 15,173 天,因为 2021 - 1980 = 15000 天。
我们使用的简单而明显的解决方法是关闭所有设备,然后在我们到外面后重新打开,但我希望有一个我缺少的 chrony 配置选项(或 timemaster 配置选项),如果它关闭了 20 年或其他如此巨大的时间量,它将忽略来源(即使它们声称是 stratum 0)。
我曾尝试更改 makestep 设置,但这实际上使问题变得更糟,因为如果我们禁用 makestep,有人在里面的机器人上工作了几个小时,时钟就会向 1980 年偏移几个小时,然后时钟就会出错,直到它可以向后偏移相同的时间量。
感谢您提供的任何想法。我实际上是在三台运行不同操作系统的嵌入式 PC 上执行此操作,因此我无法指定 Linux 版本或 chrony 版本。如果您有仅适用于最新版本的 chrony 的修复程序,我很高兴听到它!
答案1
请注意,源输出表明 PTP0 是X由于偏移量巨大而被排除在外。并且您拥有看起来像 NTP Pool 源的东西,如果它们可访问,它们会在 200 毫秒内达成一致。后者意味着如果 PTP0 没有立即执行它,这将是准确的。
删除该makestep
行并将其替换为类似
initstepslew 1 2.pool.ntp.org
当 chronyd 启动时,它会发送一些 iburst 样式的数据包,并在需要时进行步骤。因为这仅适用于 NTP,所以不会受到 GPS 修复问题的影响。
如果 IP 网络经常不可用(例如在室外),请查看man chrony.conf
“不频繁连接”和“孤立网络”示例。在网络脚本中将 NTP 服务器标记为离线和在线。在本地网络上的一些计算机上设置 NTP 服务器。任何机器,即使实时时钟较差,也会比 GPS 纪元的开始时间更近。
也许可以调整 chrony.conf 中服务器上的选项,使其不仅仅依赖 GPS。例如:
pool 2.pool.ntp.org require
其中pool.ntp.org是您配置的NTP服务器。require
表示这些服务器不需要排除在外才能调整时间。然后需要可访问的NTP服务器,但是chrony即使在断开连接时也能很好地补偿漂移。