systemd-timesyncd
來自於 systemd mailing list:
- 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
進一步講, NTP 伺服器也可以通過 systemd-networkd 提供,通過 NTP=
選項啟用, 或者通過 DHCP 服務動態加載.
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.