忽略明顯錯誤的時間源
我有一個機器人,正在使用 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
行並將其替換為類似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 擅長補償漂移,即使在斷開連接時也是如此。