時間同步(Arch Linux)

黃志斌發表於2015-10-18

時間同步

在 Arch Linux 中啟用時間同步只需執行以下命令:

$ sudo timedatectl set-ntp true

這就足夠了。

下面的內容可以不看。:)

xclock

使用以下命令安裝 xclock:

$ sudo pacman -S xorg-xclock

然後執行以下命令:

$ xclock -d -update 1 -strftime %T &

就會在螢幕上顯示每秒更新一次的數字時鐘。

Network Time Protocol daemon

網路時間協議(Network Time Protocol)是 GNU/Linux 系統通過 Internet 時間伺服器同步系統軟體時鐘的最常見方法。設計時考慮到了各種網路延遲,通過公共網路同步時,誤差可以降低到 10 毫秒以內;通過本地網路同步時,誤差可以降低到 1 毫秒。

在 Arch Linux 中,ntp 軟體包實現了網路時間協議,如果不做任何配置,ntpd預設工作於客戶端模式。也可以配置ntpd執行於伺服器模式。可以通過以下命令查詢是否已經安裝了ntp軟體包:

$ pacman -Ss "^ntp$"
extra/ntp 4.2.8.p3-1
    Network Time Protocol reference implementation

如果已經安裝了ntp軟體包,那麼只需要使用以下命令就可以啟用時間同步了:

$ sudo ntpd -u ntp:ntp

實際上在大多數情況下,我們並不需要提供 NTP 服務,所以不需要安裝ntp軟體包,而是使用下一節的方法實現時間同步。

systemd-timesyncd

systemd-timesyncd是一個用於跨網路同步系統時鐘的守護服務。它實現了一個 SNTP 客戶端。與 NTP 的複雜實現相比,這個服務簡單的多,它只專注於從遠端伺服器查詢然後同步到本地時鐘。除非你打算為客戶端提供 NTP 伺服器或者連線本地硬體時鐘,否則這個簡單的 NTP 客戶端應該更適合大多數人。守護程式執行只需要儘可能小特權,並且會跟網路服務 networkd 掛鉤,僅在網路連線可用時才工作。每次收到一個新的 NTP 同步請求時,後臺服務就把當前時間儲存到磁碟,並儘可能在系統啟動時修正系統時間,這樣處理的目的是為了適應像 Raspberry Pi 和嵌入式裝置這種缺少 RTC 的系統,並確保這些系統時單點處理(即使它並不是總是正確的)。

可以通過以下命令啟用時間同步:

$ sudo timedatectl set-ntp true

然後通過以下命令檢查時間同步狀態:

$ timedatectl

      Local time: 日 2015-10-18 08:56:18 CST  
  Universal time: 日 2015-10-18 00:56:18 UTC  
        RTC time: 日 2015-10-18 00:56:18  
       Time zone: Asia/Shanghai (CST, +0800)  
 Network time on: yes  
NTP synchronized: yes  
 RTC in local TZ: no

$ systemctl status systemd-timesyncd

● systemd-timesyncd.service - Network Time Synchronization
   Loaded: loaded (/usr/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
   Active: active (running) since 日 2015-10-18 07:44:43 CST; 1h 26min ago
     Docs: man:systemd-timesyncd.service(8)
 Main PID: 288 (systemd-timesyn)
   Status: "Synchronized to time server 202.112.29.82:123 (2.arch.pool.ntp.org)."
   CGroup: /system.slice/systemd-timesyncd.service
           └─288 /usr/lib/systemd/systemd-timesyncd

10月 18 07:44:43 m4250s systemd[1]: Starting Network Time Synchronization...
10月 18 07:44:43 m4250s systemd[1]: Started Network Time Synchronization.
10月 18 07:45:25 m4250s systemd-timesyncd[288]: Timed out waiting for reply ...).
10月 18 07:45:36 m4250s systemd-timesyncd[288]: Timed out waiting for reply ...).
10月 18 07:45:36 m4250s systemd-timesyncd[288]: Synchronized to time server ...).
Hint: Some lines were ellipsized, use -l to show in full.

參考資料

  1. ArchWiki: Time: Time synchronization
  2. ArchWiki: systemd-timesyncd
  3. ArchWiki: Network Time Protocol daemon

相關文章