如何判斷 chronyd 是否真正正確地自同步?
我正在開發一些設備,我希望它們在網路連接中斷時進行自同步(即使用 chrony 的漂移率計算來補償系統時鐘漂移),然後在遠端連接可用時正常同步。
不幸的是,chronyd 無法綁定到 NTP 偵聽埠,並主動嘗試將數據包發送到 NTP 偽伺服器地址,我無法確定這是否是預期的行為。
chrony.conf
推薦用於自同步的標准設置是:server 127.127.1.0 # Self-synchronise allow 127.0.0.0/8 # NTP server for the local system, not just a client local stratum 10 # Serve low quality time even when the remote link is down
但是,當我
chrony sources
使用該配置執行時,它聲稱它尚未與偽時間伺服器同步localhost
:chronyc sources 210 Number of sources = 1 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^? 127.127.1.0 0 7 0 - +0ns[ +0ns] +/- 0ns
儘管
chrony tracking
似乎確實表明它按預期工作:$ chronyc tracking Reference ID : 7F7F0101 () Stratum : 10 Ref time (UTC) : Mon Jun 04 08:27:11 2018 System time : 0.000000007 seconds fast of NTP time Last offset : +3.297439098 seconds RMS offset : 3.297439098 seconds Frequency : 466.833 ppm slow Residual freq : +0.000 ppm Skew : 0.000 ppm Root delay : 0.000000000 seconds Root dispersion : 0.000000000 seconds Update interval : 0.0 seconds Leap status : Normal
無論我如何調整
allow
配置文件中的設置,我都無法chronyd
顯示為實際偵聽123
任何機器介面上的 UDP 埠,而netstat -ulnp
如果我已成功將其設置為充當時間伺服器。更奇怪的是,如果我在
chronyd
下執行strace -f
,我看到它試圖實際向 發送消息127.127.1.0
,即使它應該知道這是本地時間同步的偽地址。就目前的情況而言,我幾乎沒有信心
chrony
在遠端連接中斷時實際補償時鐘漂移,因為要引發實際上確實需要自動校正時鐘漂移的情況是很棘手的。所以我的實際問題是:有誰知道如何判斷 chrony 是否正確設置為離線時的自同步?或者我是否只需要按照我目前的配置進行部署,然後等待設備與後端管理伺服器斷開連接時時鐘漂移是否存在問題?
我設法找到了問題:
port 0
我開始使用的現有配置文件中有一條無關的行,因此該allow
行沒有正確設置本地時間伺服器。刪除該行,一切都開始按我預期的方式工作。這意味著我最初問題的答案是“做你所做的”:
- 檢查是否
sudo netstat -ulnp
顯示chronyd
正在偵聽 NTP 埠 (UDP 123)- 檢查該
sudo chronyc sources
節目是否127.127.1.0
為可用來源這些檢查對我來說失敗的事實準確地反映了
port 0
設置不正確的事實。
您可能需要 根據隔離網路上的內容考慮
https://chrony.tuxfamily.org/doc/3.3/chrony.conf.html上的資訊。
有幾個選項可以幫助配置偽時間。特別是這一段可能對你很有趣:
如果沒有合適的電腦被指定為主電腦,或者即使客戶端失敗也需要保持客戶端同步,則 local 指令的孤兒選項啟用一種特殊模式,即自動從多台電腦中選擇主電腦。它們都需要使用相同的本地配置並相互輪詢。具有最小參考 ID(基於其 IP 地址)的伺服器將充當主伺服器,其他伺服器將與其同步。當它失敗時,具有第二小的參考 ID 的伺服器將接管,依此類推。
但正如我從文件中了解到的那樣,需要幾台伺服器。
關於您的伺服器出現同步也許這種情況可能適用於您: https ://chrony.tuxfamily.org/faq.html#_computer_is_not_synchronising
檢查
Reach
chronycsources
命令列印的值。如果它為零,則意味著 chronyd 沒有從您嘗試使用的 NTP 伺服器獲得任何有效響應。該手冊還解釋了該
local
指令當地的$$ option $$
… local 指令啟用本地參考模式,它允許 chronyd 作為 NTP 伺服器執行,以顯示為與實時同步(從客戶端輪詢它的角度來看),即使它從未同步或時鐘的最後一次更新發生很久以前。
所以它可能會給出一個同步時間,儘管它不是真的