幫助Raspberry Pi更好地完成跨網絡同步系統(tǒng)時鐘任務
?? ??????m( ^=∩王∩=^?)m ????????
年前的這幾天因為供電線路維修,導致自己的“吃灰派”多次意外斷電。。。擔心跑在上面的幾個用戶服務進程數(shù)據多少會受到些影響,所以進行了一次比較全面的檢查維護。在查看系統(tǒng)日志的時候發(fā)現(xiàn)系統(tǒng)時鐘同步總會有網絡超時的問題:

如果在日常使用中對系統(tǒng)時鐘的精確度、實時性要求不是特別嚴格的話,這算不上什么大問題,可以選擇忽略。不過借此機會,打算在解決問題的同時略微了解一下系統(tǒng)時鐘同步的服務(才……才不是因為有什么奇怪的強迫癥呢!ヾ(≧へ≦)〃)
同步系統(tǒng)時鐘的方式一般來說有兩種,通過RTC硬件模塊或NTP網絡同步時間,前者需要額外借助RTC硬件電路實現(xiàn),能夠在不依賴網絡的情況下完成同步任務;后者需要依賴聯(lián)網完成時鐘同步,受當前網絡連通狀況的影響較大。樹莓派開發(fā)板是不帶有RTC模塊電路的,所以默認是通過NTP網絡校時,而系統(tǒng)默認的NTP同步源在國內的表現(xiàn)并不樂觀。雖然外接一個GPIO接口所能使用的高精度RTC模塊(DS3231),無論是從成本還是后續(xù)實現(xiàn)的難易程度來說都是完全可接受的,但本著能省則省、減少模塊依賴、增強系統(tǒng)整體穩(wěn)定性的原則,通過解決網絡授時超時的問題,用以滿足高效同步系統(tǒng)時鐘的需求。很明顯,問題的根源在于NTP網絡時鐘同步源的選取;想要修改系統(tǒng)默認設置,就必須要找到相應的工具或配置文件。
?? ??????m( ^=∩王∩=^?)m ????????
我自己的樹莓派上面運行的是raspios-buster-arm64-lite官方系統(tǒng),具體信息如下:
百度一下有關樹莓派系統(tǒng)時鐘同步的方案,大部分都是提供如何調整本地時區(qū)或者通過安裝額外的NTP授時工具包的解決問題。可惜的是,我的系統(tǒng)時區(qū)設置并無問題(Time zone: Asia/Shanghai (CST, +0800)),也并不愿意再額外引入軟件包用于解決這個無關痛癢的問題;既然系統(tǒng)默認能夠實現(xiàn)NTP同步系統(tǒng)時鐘的功能,那么一定存在某種機制或工具來控制這一切,簡單檢索一下systemd服務提供的各種便捷功能,暫且找到與系統(tǒng)時間最為密切的管理工具timedatectl,習慣性地man一下:
同時順藤摸瓜式地找到systemd-timesyncd守護服務,最直接相關的配置文件大概率是在/etc/systemd/路徑下,存在一個名為timesyncd.conf的配置文件:
至此基本可以確定自己的推測了,查閱timesyncd.conf幫助文檔進一步證實:
完整地閱讀幫助文檔可以得知,當配置中的NTP服務列表缺省時,默認采用FallbackNTP列表中的NTP時鐘同步源進行校時。那么解決方案就是在timesyncd.conf配置文件中添加合適的NTP服務主機名或ip,彼此之間并用空格隔開。百度一下可用的NTP授時服務并測試網絡延遲,以我的為例,選擇國內的NTP網絡時鐘同步服務主機,找最適合自己的:
ntp.ntsc.ac.cn

ntp.tuna.tsinghua.edu.cn

最終配置內容如下,剔除 # 取消注釋,僅以列表格式修改了NTP項的內容,其他配置項默認即可:

保存并退出,重新載入系統(tǒng)時鐘同步服務、檢查服務進程狀態(tài),按預期完成了同步任務:
$ sudo systemctl restart systemd-timesyncd.service
$ systemctl status systemd-timesyncd.service

再次檢查系統(tǒng)日志記錄,確認是“一命通關”:

使用timedatectl可以獲取更詳細的時鐘同步信息:

當然,這一切的前提是你的系統(tǒng)時區(qū)設置符合預期、網絡時鐘同步功能開啟,可以參考以下幫助內容:
?? ??????m( ^=∩王∩=^?)m ????????
以上方法應該也同樣適用于Debian或基于Debian的各類GNU/Linux發(fā)行版,只能說systemd服務所提供的功能實在是太豐富、太實用了,值得花時間去了解、學習。
參考資料:
https://manpages.debian.org/buster/systemd/timedatectl.1.en.html
https://manpages.debian.org/buster/systemd/timesyncd.conf.5.en.html
https://wiki.archlinux.org/title/Systemd-timesyncd_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
https://dns.icoa.cn/ntp/
