systemd-timesyncd - Arch Linux 中文维基

跳至內容

# systemd-timesyncd

出自 Arch Linux 中文维基

翻譯狀態：

- 本文（或部分內容）譯自 Systemd-timesyncd，最近一次同步於 2025-09-13，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

相關文章

- systemd-networkd
- systemd
- 系統時間

摘自 systemd 郵件列表：

  systemd-timesyncd 是一個用於跨網絡同步系統時鐘的守護服務。它實現了一個 SNTP 客戶端。與 chrony 或 NTP 參考伺服器等 NTP 實現相比，這個服務僅做了客戶端實現，摒棄了完整 NTP 實現的複雜性。它只專注於從遠程伺服器查詢然後同步到本地時鐘。除非你打算為網絡客戶端提供 NTP 服務或者連接本地硬體時鐘，否則這個簡單的 NTP 客戶端應該更適合大多數人。守護進程運行只需要最小特權，並且會跟網絡服務 networkd 掛鉤，僅在網絡連接可用時才工作。每次收到一個新的 NTP 同步請求或每 60 秒時，後台服務就把當前時間保存到磁碟，並儘可能在系統啟動時修正系統時間，這樣處理的目的是為了適應像 Raspberry Pi 和嵌入式設備這種缺少 RTC 的系統，並確保這些系統時單點處理（即使它並不是總是正確的）。如果要使用這個守護進程，需要在安裝系統時創建一個新的系統用戶和組「systemd-timesync」。

## 配置

systemd-timesyncd 啟動時會讀取 `/etc/systemd/timesyncd.conf` 配置文件，內容如下:

    /etc/systemd/timesyncd.conf

    [Time]
    #NTP=
    #FallbackNTP=0.arch.pool.ntp.org 1.arch.pool.ntp.org 2.arch.pool.ntp.org 3.arch.pool.ntp.org
    #...

要增加或者更改時間同步伺服器, 取消上文中對應的注釋，然後將伺服器的域名或 IP 以空格間隔開列出。另外，你也可以將配置文件放入 `/etc/systemd/timesyncd.conf.d/*.conf`，詳細信息請參考 timesyncd.conf(5)。

例如，可以使用 NTP 項目或者 Arch 默認（NTP 也有這個站點）提供的任何時間伺服器：

    /etc/systemd/timesyncd.conf 或者 /etc/systemd/timesyncd.conf.d/local.conf

    [Time]
    NTP=0.arch.pool.ntp.org 1.arch.pool.ntp.org 2.arch.pool.ntp.org 3.arch.pool.ntp.org
    FallbackNTP=0.pool.ntp.org 1.pool.ntp.org 0.fr.pool.ntp.org

要驗證配置:

    $ timedatectl show-timesync --all

    LinkNTPServers=
    SystemNTPServers=
    FallbackNTPServers=0.arch.pool.ntp.org 1.arch.pool.ntp.org 2.arch.pool.ntp.org 3.arch.pool.ntp.org
    ServerName=0.arch.pool.ntp.org
    ServerAddress=103.47.76.177
    RootDistanceMaxUSec=5s
    PollIntervalMinUSec=32s
    PollIntervalMaxUSec=34min 8s
    PollIntervalUSec=1min 4s
    NTPMessage={ Leap=0, Version=4, Mode=4, Stratum=2, Precision=-21, RootDelay=177.398ms, RootDispersion=142.196ms, Reference=C342F10A, OriginateTimestamp=Mon 2018-07-16 13:53:43 +08, ReceiveTimestamp=Mon 2018-07-16 13:53:43 +08, TransmitTimestamp=Mon 2018-07-16 13:53:43 +08, DestinationTimestamp=Mon 2018-07-16 13:53:43 +08, Ignored=no PacketCount=1, Jitter=0 }
    Frequency=22520548

另外，也可以使用 systemd-networkd .network 文件的 `NTP=` 選項或 DHCP 伺服器（需在 `[DHCPv4]` 或 `[DHCPv6]` 部分啟用 `UseNTP` 選項）指定 NTP 伺服器。

NTP 伺服器的選擇會遵循以下規則:

- systemd-networkd.service(8) 中針對每個接口的配置，或者 DHCP 服務優先。
- `/etc/systemd/timesyncd.conf` 中定義的 NTP 伺服器會在運行時被添加到針對每個接口的伺服器列表中，守護進程會輪流連接這些伺服器直到某個有應答。
- 如果上兩步沒有取到 NTP 伺服器， 那麼將使用 `FallbackNTP=` 中定義的伺服器。

注意：

- 這個服務每次同步或每 60 秒會寫入 `/var/lib/systemd/timesync/clock` 本地文件, 這個目錄是硬編碼的，不可以更換。
- 這一寫入機制在只讀的 root 分區或者嘗試減少 SD 卡寫入量時可能會造成問題。
- 寫入次數可以通過類似 `PollIntervalMinSec=1d` 和 `SaveIntervalSec=infinity` 這樣的配置項降低。

## 使用

### 啟用並啟動

要啟用和啟動它，執行：

    # timedatectl set-ntp true

其他方法（如在使用 chroot 時）有啟動/啟用 `systemd-timesyncd.service`。

### 檢查服務

同步過程可能會很慢，請耐心等一會。要檢查服務狀態，使用:

    $ timedatectl status

                   Local time: Thu 2015-07-09 18:21:33 CEST
               Universal time: Thu 2015-07-09 16:21:33 UTC
                     RTC time: Thu 2015-07-09 16:21:33
                    Time zone: Europe/Amsterdam (CEST, +0200)
    System clock synchronized: yes
                  NTP service: active
              RTC in local TZ: no

### 查看詳細信息

要查看更多的服務信息，請使用:

    $ timedatectl timesync-status

           Server: 103.47.76.177 (0.arch.pool.ntp.org)
    Poll interval: 2min 8s (min: 32s; max 34min 8s)
             Leap: normal
          Version: 4
          Stratum: 2
        Reference: C342F10A
        Precision: 1us (-21)
    Root distance: 231.856ms (max: 5s)
           Offset: -19.428ms
            Delay: 36.717ms
           Jitter: 7.343ms
     Packet count: 2
        Frequency: +267.747ppm

### 查看非默認配置

要查看非默認配置選項和文件（即被修改的配置項），使用：

    $ systemd-analyze cat-config systemd/timesyncd.conf --tldr

    # /etc/systemd/timesyncd.conf
    [Time]

    # /etc/systemd/timesyncd.conf.d/local.conf
    [Time]
    NTP=0.nl.pool.ntp.org 1.nl.pool.ntp.org 2.nl.pool.ntp.org 3.nl.pool.ntp.org
    RootDistanceMaxSec=0.1
    PollIntervalMinSec=1d
    PollIntervalMaxSec=4w
    SaveIntervalSec=infinity

### 查看日誌

要查看過去 24 小時的事件記錄，使用：

    # journalctl -u systemd-timesyncd --no-hostname --since "1 day ago"

    Jan 19 15:14:20 systemd[1]: Stopping Network Time Synchronization...
    Jan 19 15:14:20 systemd[1]: systemd-timesyncd.service: Deactivated successfully.
    Jan 19 15:14:20 systemd[1]: Stopped Network Time Synchronization.
    Jan 19 15:14:20 systemd[1]: Starting Network Time Synchronization...
    Jan 19 15:14:20 systemd[1]: Started Network Time Synchronization.
    Jan 19 15:14:20 systemd-timesyncd[1023]: Contacted time server 178.215.228.24:123 (0.nl.pool.ntp.org).
    Jan 19 15:14:20 systemd-timesyncd[1023]: Initial clock synchronization to Fri 2024-01-19 15:14:20.393865 CET.

## 參閱

- 論壇：systemd-timesyncd 沒有保持時間同步
- 論壇：使用 systemd-timesync 替代 NTP
- timesyncd 源碼
- systemd-timesyncd(8)
- timesyncd.conf(5)

分類：​

- NTP

systemd-timesyncd
新增話題