我有一个机器人,正在使用 timemaster 启动 chrony 并从我的 GPS 添加 PTP 源。当我在无法获得卫星定位的内部启动机器人时,GPS 声称它是 1980 年 1 月 5 日。结果,我得到了一个被选中的第 0 层源,时间步进到 1980 年(因为我有“makestep 1 3”配置为chrony),然后当我将机器人带到外面并且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 配置选项)会忽略源(即使他们声称是第 0 层)如果它在 20 年或其他一些如此巨大的时间内关闭。
我曾尝试更改 makestep 设置,但这实际上会使问题变得更糟,因为如果我们禁用 makestep,有人在里面的机器人上工作几个小时,时钟会向 1980 倾斜几个小时,然后时钟会出错,直到它可以在相同的时间内向后倾斜。
感谢您的任何想法。我实际上是在运行不同操作系统的三台嵌入式 PC 上执行此操作,因此我无法指定 Linux 版本或 chrony 版本。如果您有一个仅适用于最新版本 chrony 的修复程序,我很高兴听到它!
请注意,您的源输出表明 PTP0由于巨大的偏移而被排除在外。如果可以访问,您将拥有在 200 毫秒内达成一致的 NTP 池源。后者意味着如果 PTP0 没有立即执行它,这将是准确的。
删除该
makestep
行并将其替换为类似当 chronyd 启动时,它会发送一些 iburst 样式的数据包,并在需要时进行步进。因为这只是 NTP,不会受到 GPS 定位问题的影响。
如果 IP 网络经常不可用,比如在外面,请查看
man chrony.conf
“不经常连接”和“隔离网络”示例。在网络脚本中将 NTP 服务器标记为离线和在线。在本地网络的某些计算机上设置 NTP 服务器。任何机器即使实时时钟较差,也会比 GPS 时代的开始更近。也许在 chrony.conf 中调整服务器上的选项,使其不仅仅依赖 GPS。例如:
其中 pool.ntp.org 是您配置的 NTP 服务器。
require
意味着不需要排除这些服务器以调整时间。然后需要可访问的 NTP 服务器,但 chrony 擅长补偿漂移,即使在断开连接时也是如此。