systemd-timesyncd
来自 systemd 邮件列表
- systemd-timesyncd 是一个守护进程,已被添加用于跨网络同步系统时钟。它实现了一个 SNTP 客户端。与 NTP 实现(例如 chrony 或 NTP 参考服务器)相比,它仅实现客户端侧,并且不涉及完整的 NTP 复杂性,仅专注于从一个远程服务器查询时间并将本地时钟与之同步。除非您打算为联网客户端提供 NTP 服务或想要连接到本地硬件时钟,否则对于大多数安装而言,这个简单的 NTP 客户端应该绰绰有余。该守护进程以最小权限运行,并且已与 networkd 连接,以便仅在网络连接可用时运行。守护进程每次获得新的 NTP 同步时(以及每 60 秒)将当前时钟保存到磁盘,并使用它可能在启动时及早更正系统时钟,以便适应缺少 RTC 的系统(例如 Raspberry Pi 和嵌入式设备),并确保时间在这些系统上单调递增,即使它并非始终正确。为了使用此守护进程,需要在安装 systemd 时创建一个新的系统用户和组“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 or /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 服务器提供(当在.network 文件的 [DHCPv4]
或 [DHCPv6]
部分中启用 UseNTP
选项时)。
将使用以下规则确定要使用的 NTP 服务器
- 从 systemd-networkd.service(8) 配置或通过 DHCP 获取的任何每个接口的 NTP 服务器都优先。
- 在
/etc/systemd/timesyncd.conf
中定义的 NTP 服务器将在运行时附加到每个接口的列表,守护进程将依次联系这些服务器,直到找到响应的服务器。 - 如果在完成这些步骤后未获取到 NTP 服务器信息,则将使用在
FallbackNTP=
中定义的 NTP 服务器主机名或 IP 地址。
注意
- 该服务每次同步和每 60 秒写入本地文件
/var/lib/systemd/timesync/clock
。此位置是硬编码的,无法更改。 - 对于从只读根分区运行或尝试最小化对 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.