systemd-timesyncd
来自 systemd 邮件列表
- systemd-timesyncd 是一个为了在网络中同步系统时钟而添加的守护进程。它实现了一个 SNTP 客户端。与 chrony 或 NTP 参考服务器等 NTP 实现不同,它仅实现了客户端,并不涉及完整的 NTP 复杂性,仅专注于从一个远程服务器查询时间并将本地时钟与之同步。除非您打算向网络客户端提供 NTP 服务或想要连接到本地硬件时钟,否则对于大多数安装来说,这个简单的 NTP 客户端应该是绰绰有余的。该守护进程以最小权限运行,并与 networkd 挂钩,仅在网络连接可用时运行。守护进程在每次获取新的 NTP 同步时(以及每 60 秒)都会将当前时钟保存到磁盘,并利用此功能在启动早期尽可能地修正系统时钟,以适应像 Raspberry Pi 和嵌入式设备等缺乏 RTC(实时时钟)的系统,并确保这些系统上的时间单调递增,即使它并不总是准确。为了使用此守护进程,在安装 systemd 时需要创建一个新的系统用户和组 "systemd-timesync"。
安装
systemd 是 Arch 默认安装的一部分,包含了处理 简单网络时间协议 (SNTP) 所需的所有文件。
配置
启动时,systemd-timesyncd 将从 /etc/systemd/timesyncd.conf 以及 /etc/systemd/timesyncd.conf.d/*.conf 中的配置片段读取配置文件,详见 timesyncd.conf(5)。
要添加 时间服务器 或更改提供的服务器,请列出其主机名或 IP,并用空格分隔。
例如,您可以使用 NTP pool 项目 提供的任何服务器,或使用 Arch 默认的服务器(同样由 NTP pool 项目提供)
/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 的 .network 文件通过 NTP= 选项提供,或者动态地通过 DHCP 服务器提供(当 [DHCPv4] 或 [DHCPv6] 部分中的 UseNTP 选项启用时)。
将要使用的 NTP 服务器将根据以下规则确定
- 任何从 systemd-networkd.service(8) 配置或通过 DHCP 获取的针对特定接口的 NTP 服务器具有优先权。
- 在
/etc/systemd/timesyncd.conf中定义的 NTP 服务器将在运行时被追加到针对特定接口的列表中,守护进程将依次联系这些服务器,直到找到一个有响应的为止。 - 如果在完成这些步骤后仍未获取到 NTP 服务器信息,则将使用
FallbackNTP=中定义的时间服务器主机名或 IP 地址。
- 该服务在每次同步时以及每 60 秒向本地文件
/var/lib/systemd/timesync/clock写入。此位置是硬编码的,无法更改。 - 对于在只读根分区上运行或尝试尽量减少 SD 卡写入操作的情况,这种写入可能会产生问题。
- 可以通过类似
PollIntervalMinSec=1d和SaveIntervalSec=infinity的配置来尽量减少写入次数。
用法
启用并启动
启动/启用 systemd-timesyncd.service,或者简单地运行(不在 chroot 环境中时)
# timedatectl set-ntp true
检查服务
同步过程可能会明显缓慢。这是正常现象,在确定存在问题之前应等待一段时间。要检查服务状态,请使用
$ 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
或检查 systemd journal。
检查详细信息
要查看详细的服务信息,请使用
$ 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