Linux

忽略明顯錯誤的時間源

  • July 22, 2021

我有一個機器人,正在使用 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 擅長補償漂移,即使在斷開連接時也是如此。

引用自:https://serverfault.com/questions/1070323