跳转至内容

systemd-timesyncd

来自 ArchWiki

来自 systemd 邮件列表

systemd-timesyncd 是一个守护进程,用于在网络上同步系统时钟。它实现了一个 SNTP 客户端。与 chrony 或 NTP 参考服务器等 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 Pool 项目提供的任何服务器,或者使用 Arch 的默认服务器(也由 NTP Pool 项目提供)。

/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.network 文件中的 NTP= 选项提供,或者通过 DHCP 服务器动态提供(当 UseNTP 选项在 [DHCPv4][DHCPv6] 部分启用时)。

将使用以下规则确定 NTP 服务器

  • 通过 systemd-networkd.service(8) 配置或通过 DHCP 获取的任何每个接口的 NTP 服务器都具有优先权。
  • 在运行时,/etc/systemd/timesyncd.conf 中定义的 NTP 服务器将附加到每个接口的列表中,并且守护进程会依次联系服务器,直到找到一个响应的服务器。
  • 如果在完成这些步骤后未获取到任何 NTP 服务器信息,将使用 FallbackNTP= 中定义的 NTP 服务器主机名或 IP 地址。
  • 该服务在每次同步后以及每 60 秒将数据写入本地文件 /var/lib/systemd/timesync/clock。此位置是硬编码的,无法更改。
  • 此写入操作可能对从只读根分区运行或尝试最小化 SD 卡写入造成问题。
  • 可以通过配置 PollIntervalMinSec=1dSaveIntervalSec=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.

参见