跳至內容跳至頁面導覽:上一頁 [access key p]/下一頁 [access key n]
documentation.suse.com / SUSE Linux Enterprise Desktop 文件 / 管理指南 / 服務 / 使用 NTP 同步時間
適用範圍 SUSE Linux Enterprise Desktop 15 SP6

39 使用 NTP 同步時間

NTP (網路時間協定) 機制是一種協定,用於同步化網路上的系統時間。首先,機器可以從提供可靠時間來源的伺服器取得時間。其次,機器本身在網路中可以做為其他電腦的時間來源。這個目標是雙重的 — 即維護絕對正確的時間,並同步化網路內所有機器的系統時間。

維謢精準的系統時間對於許多情況都非重要。內建的硬體時鐘通常無法符合資料庫或叢集等應用程式的要求。手動校正系統時間有可能會造成嚴重的問題,因為,例如時間倒退將可能造成重要應用程式無法正常運作。在網路中,通常需要同步所有機器中的系統時間,而手動調整時間的做法並不可取。NTP 提供了一種用於解決這些問題的機制。NTP 服務會依據網路中可靠的時間伺服器持續調整系統時間。它可以進一步管理本地參考的時鐘,例如收音機控制的時鐘。

SUSE Linux Enterprise Desktop 15 起,採用 chrony 做為 NTP 的預設實作。chrony 包含兩個部分:chronyd 精靈可在開機時啟動,chronyc 指令列介面程式用於監控 chronyd 的效能,以及在執行時期變更操作參數。

SUSE Linux Enterprise Desktop 15.2 開始,如果不是設定為以精靈的形式執行,適用於 NTP 用戶端組態的 YaST 模組會設定 systemd-timer 而不是 cron 精靈來執行 chrony

注意
注意

若要透過 Active Directory 啟用時間同步,請依照Procedure 7.2, “Joining an Active Directory domain using Windows domain membership中的說明操作。

39.1 使用 YaST 設定 NTP 用戶端

chrony 套件中隨附的 NTP 精靈 (chronyd) 預先設定為使用本地電腦硬體時鐘做為時間參考。硬體時鐘的精確度極大程度上取決於它的時間來源。例如,原子鐘或 GPS 接收器是精確的時間來源,而通用 RTC 晶片則不是可靠的時間來源。YaST 簡化了 NTP 用戶端的組態。

在 YaST NTP 用戶端組態 (網路服務 › NTP 組態) 視窗中,您可以指定啟動 NTP 精靈的時間、組態來源的類型,以及新增自訂的時間伺服器。

NTP 組態視窗
圖 39.1︰ NTP 組態視窗

39.1.1 NTP 精靈啟動

您可以從下面三個選項中選擇啟動 NTP 精靈的時間:

僅手動

選取僅手動,將以手動方式啟動 chrony 精靈。

同步但不啟動精靈

選取同步但不啟動精靈可定期設定系統時間,而不會永久執行 chrony。您可以設定同步時間間隔(分鐘)

現在和開機時

選取現在和在開機時可在系統開機時自動啟動 chronyd。建議您使用此設定。

39.1.2 組態來源的類型

組態來源下拉式方塊中,選取動態靜態。如果伺服器只使用固定的一組 (公用) NTP 伺服器,請設定靜態;如果您的內部網路透過 DHCP 提供 NTP 伺服器,則使用靜態更合適。

39.1.3 設定時間伺服器

供用戶端查詢的時間伺服器列在 NTP 組態視窗的下半部分。修改清單時,可依需要使用新增編輯以及刪除

按一下新增可新增新的時間伺服器:

新增時間伺服器
圖 39.2︰ 新增時間伺服器
  1. 位址欄位中,輸入要與機器時間同步的時間伺服器或時間伺服器池的 URL。填寫好 URL 後,按一下測試以驗證該 URL 是否指向有效的時間來源。

  2. 啟用快速初始同步,以便在 chronyd 精靈啟動時透過傳送更多要求來加速時間同步。

  3. 啟用離線啟動,以使會自動啟動 chronyd 精靈且開機時可能未連接到網際網路的系統加快開機速度。例如,對於由 NetworkManager 管理網路連接的筆記型機器,此選項非常實用。

  4. 按一下確定加以確認。

39.2 手動設定網路中的 NTP

chrony/etc/chrony.conf 檔案讀取其組態。若要讓電腦時鐘保持同步,您需要告訴 chrony 使用什麼時間伺服器。您可以使用特定的伺服器名稱或 IP 位址,例如:

0.suse.pool.ntp.org
1.suse.pool.ntp.org
2.suse.pool.ntp.org
3.suse.pool.ntp.org

還可以指定名稱。池名稱會解析為數個 IP 位址:

pool pool.ntp.org
提示
提示:同一網路中的多部電腦

若要同步同一網路中多部電腦的時間,建議不要透過一部外部伺服器來同步所有這些電腦。比較好的做法是將其中一部電腦做為時間伺服器 (它與外部時間伺服器同步),其他電腦做為它的用戶端。將 local 指令新增至伺服器的 /etc/chrony.conf,以將其與權威時間伺服器區分開:

local stratum 10

若要啟動 chrony,請執行:

systemctl start chronyd.service

啟始化 chronyd 後,系統需要花費一些時間來穩定時間,以及建立用於校正本地電腦時鐘的偏移檔案。使用漂移檔案,可以在電腦開機時計算硬體時鐘的系統錯誤。它會立即使用校正,使系統時間具有更高的穩定性。

若要啟用 chrony,以便該服務在開機時自動啟動,請執行:

systemctl enable chronyd.service
警告
警告:衝突的 yast-timesync.service 服務

除了 chronyd.service 服務外,SLED 中還包含 yast-timesync.service。計時器每 5 分鐘會觸發一次 yast-timesync.service,該服務即會執行 chronyd (使用 -q 選項) 以設定系統時間,然後會結束。由於同一時間只能執行 chronyd 的一個例項,因此請勿同時啟用或啟動兩個 chronyd 相關的服務。

39.3 在執行時期使用 chronyc 設定 chronyd

在執行時期,您可以使用 chronyc 來變更 chronyd 的行為。它會產生有關 chronyd 操作的狀態報告。

您可以採用互動模式或非互動模式執行 chronyc。若要以互動模式執行 chronyc,請在指令列上輸入 chronyc。如此會顯示提示符並等待您輸入指令。例如,若要檢查有多少 NTP 來源在線上或離線,請執行:

# chronyc
chronyc> activity
200 OK
4 sources online
2 sources offline
1 sources doing burst (return to online)
1 sources doing burst (return to offline)
0 sources with unknown address

若要結束 chronyc 的提示符,請輸入 quitexit

如果您不需要使用互動式提示符,請直接輸入指令:

# chronyc activity
注意
注意:暫時的變更

使用 chronyc 進行的變更不是永久性的。當 chronyd 下次重新啟動時,它們將會遺失。若要進行永久變更,請修改 /etc/chrony.conf

如需 chronyc 指令的完整清單,請參閱其手冊頁 (man 1 chronyc)。

39.4 執行時期的動態時間同步

儘管 chronyd 通常在開機時沒有網路連接的系統上啟動,但該工具無法解析組態檔案中所指定時間伺服器的 DNS 名稱。

chronyd 會依遞增的時間間隔,不斷嘗試解析由 serverpoolpeer 指令指定的時間伺服器名稱,直至成功為止。

如果啟動 chronyd 時將無法存取時間伺服器,您可以指定 offline 選項:

server server_address offline

如此,chronyd 將不會嘗試輪詢該伺服器,除非使用以下指令啟用它:

# chronyc online server_address

設定 auto_offline 選項後,如果向時間伺服器傳送了兩個要求,但未接收到任何回應,chronyd 會假設時間伺服器已離線。如果使用此選項,當網路連結斷開時,無需從 chronyc 執行 offline 指令。

39.5 設定本地參考時鐘

套裝軟體 chrony 依賴於其他程式 (例如 gpsd) 來透過 SHM 或 SOCK 驅動程式存取計時資料。在 /etc/chrony.conf 中使用 refclock 指令可指定要用做時間來源的硬體參考時鐘。它有兩個強制參數:驅動程式名稱和驅動程式特定的參數。這兩個參數後面跟著零或多個 refclock 選項。chronyd 包含以下驅動程式:

  • PPS:核心 pulse per second API 的驅動程式。例如:

    refclock PPS /dev/pps0 lock NMEA refid GPS
  • SHM:NTP 共用記憶體驅動程式。例如:

    refclock SHM 0 poll 3 refid GPS1
    refclock SHM 1:perm=0644 refid GPS2
  • SOCK:Unix 網域通訊端驅動程式。例如:

    refclock SOCK /var/run/chrony.ttyS0.sock
  • PHC:PTP 硬體時鐘驅動程式。例如:

    refclock PHC /dev/ptp0 poll 0 dpoll -2 offset -37
    refclock PHC /dev/ptp1:nocrossts poll 3 pps

如需各個驅動程式選項的詳細資訊,請參閱 man 8 chrony.conf

39.6 與外部時間參考 (ETR) 的時鐘同步

支援將時鐘與外部時間參考 (ETR) 同步。外部時間參考每 2**20 (2 的 20 次方) 微秒傳送一次振盪器訊號與同步訊號,以將所有連結伺服器的 TOD 時鐘保持同步。

為了便利,兩個 ETR 裝置可連接到一個機器。如果時鐘偏差超出同步檢查容錯,將會對所有 CPU 執行一次機器檢查,這表示時鐘未同步。如果出現這種狀況,則所有啟用了 DASD I/O 到 XRC 的裝置就會停止運作,直到時鐘重新同步。

ETR 支援透過兩個 sysfs 屬性啟動;請以 root 身分執行下列指令:

echo 1 > /sys/devices/system/etr/etr0/online
echo 1 > /sys/devices/system/etr/etr1/online