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.