在 Ubuntu 中使用 NTP 進行時間同步設定

NO IMAGE

NTP 是通過網路來同步時間的一種 TCP/IP 協議。通常客戶端向伺服器請求當前的時間,並根據結果來設定其時鐘。

這個描述是挺簡單的,實現這一功能卻是極為複雜的 – 首先要有多層 NTP 伺服器,第一層 NTP 伺服器連線原子時鐘,第二層、第三層伺服器則擔起負載均衡的責任,以處理因特網傳來的所有請求。另外,客戶端可能也超乎你想象的複雜 – 它必須排除通訊延遲,調整時間的同時不干擾其它在伺服器中執行的程序。幸運的是,所有的這些複雜性都進行了封裝,你是不可見也不需要見到的。

在 Ubuntu 中,是使用 ntpdate ntpd 來同步時間的。

timedatectl

在最新的 Ubuntu 版本中,timedatectl 替代了老舊的 ntpdate。預設情況下,timedatectl 在系統啟動的時候會立刻同步時間,並在稍後網路連線啟用後通過 socket 再次檢查一次。

如果已安裝了 ntpdate / ntptimedatectl 會退而讓你使用之前的設定。這樣確保了兩個時間同步服務不會相互衝突,同時在你升級的時候還保留原本的行為和配置。但這也意味著從舊版本的發行版升級時 ntp/ntpdate 仍會安裝,因此會導致新的基於 systemd 的時間服務被禁用。

timesyncd

在最新的 Ubuntu 版本中,timesyncd 替代了 ntpd 的客戶端的部分。預設情況下 timesyncd 會定期檢測並同步時間。它還會在本地儲存更新的時間,以便在系統重啟時做時間單步調整。

通過 timedatectl timesyncd 設定的當前時間狀態和時間配置,可以使用 timedatectl status 命令來進行確認。


timedatectl status
Local time: Fri 2016-04-29 06:32:57 UTC
Universal time: Fri 2016-04-29 06:32:57 UTC
RTC time: Fri 2016-04-29 07:44:02
Time zone: Etc/UTC (UTC,  0000)
Network time on: yes
NTP synchronized: no
RTC in local TZ: no

如果安裝了 NTP,並用它替代 timedatectl 來同步時間,則 NTP synchronized 將被設定為 yes

timedatectl timesyncd 用來獲取時間的 nameserver 可以通過 /etc/systemd/timesyncd.conf 來指定,另外在 /etc/systemd/timesyncd.conf.d/ 下還有靈活的附加配置檔案。

ntpdate

由於 timedatectl 的存在,各發行版已經棄用了 ntpdate,預設不再進行安裝。如果你安裝了,它會在系統啟動的時候根據 Ubuntu 的 NTP 伺服器來設定你電腦的時間。之後每當一個新的網路介面啟動時,它就會重新嘗試同步時間 —— 在這期間只要其涵蓋的時間差不是太大,它就會慢慢偏移時間。該行為可以通過 -B/-b 開關來進行控制。


ntpdate ntp.ubuntu.com

時間伺服器

預設情況下,基於 systemd 的工具都是從 ntp.ubuntu.com 請求時間同步的。經典的基於 ntpd 的服務基本上都是使用 [0-3].ubuntu.pool.ntp.org 池中的 2.ubuntu.pool.ntp.org,還有 ntp.ubuntu.com,此外需要的話還支援 IPv6。如果想強制使用 IPv6,可以使用 ipv6.ntp.ubuntu.com,不過這並非預設配置。

ntpd

ntp 的守護程序 ntpd 會計算你的系統時鐘的時間偏移量並且持續的進行調整,所以不會出現時間差距較大的更正,比如說,不會導致不連續的日誌。該程序只花費少量的程序資源和記憶體,但對於現代的伺服器來說實在是微不足道的了。

安裝

要安裝 ntpd,在終端命令列中輸入:


sudo apt install ntp

配置

編輯 /etc/ntp.conf —— 增加/移除 server 行。預設配置有以下伺服器:


# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board
# on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for
# more information.
server 0.ubuntu.pool.ntp.org
server 1.ubuntu.pool.ntp.org
server 2.ubuntu.pool.ntp.org
server 3.ubuntu.pool.ntp.org

修改配置檔案之後,你需要重新載入 ntpd


sudo systemctl reload ntp.service

檢視狀態

使用 ntpq 來檢視更多資訊:


# sudo ntpq -p
remote      refid   st t when poll reach  delay  offset jitter
========================================================
stratum2-2.NTP. 129.70.130.70  2 u  5  64 377  68.461 -44.274 110.334
ntp2.m-online.n 212.18.1.106   2 u  5  64 377  54.629 -27.318 78.882
*145.253.66.170 .DCFa.      1 u  10  64 377  83.607 -30.159 68.343
stratum2-3.NTP. 129.70.130.70  2 u  5  64 357  68.795 -68.168 104.612
europium.canoni 193.79.237.14  2 u  63  64 337  81.534 -67.968 92.792

PPS 支援

從 Ubuntu 16.04 開始,ntp 支援 PPS 規範,給 ntp 提供了本地時間源,以提供更高的精度。以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援指令碼之家。

您可能感興趣的文章:

如何解決win10與Ubuntu16.04時間不同步的問題的方法ubuntu系統下禁用utc時間的設定方法