在许多情况下,维护精确的系统时间非常重要。内置的硬件时钟通常不能满足数据库或集群等应用程序的要求。手动校正系统时间会导致严重问题,因为例如,向后跳跃可能导致关键应用程序发生故障。在网络中,通常需要同步所有机器的系统时间,但手动调整时间不是一个好的方法。NTP提供了一种解决这些问题的方法。NTP服务会持续使用网络中可靠的时间服务器调整系统时间。它还能够管理本地参考时钟,例如无线电控制时钟。
从 openSUSE Leap 15 开始,chrony 是 NTP 的默认实现。 chrony 包括两个部分;chronyd 是一个可以在启动时启动的守护进程,而 chronyc 是一个命令行界面程序,用于监视 chronyd 的性能,并在运行时更改操作参数。
从 openSUSE Leap 15.2 开始,YaST 模块用于 NTP 客户端配置,配置 systemd-timer 而不是 cron 守护进程来执行 chrony,当它未配置为守护进程运行时。
要启用通过 Active Directory 进行时间同步,请遵循 “安全和加固指南”书籍,第 7 章“Active Directory 支持”,第 7.3.3 节“使用 加入 Active Directory”,使用 加入 Active Directory 域 中找到的说明。
随 chrony 包一起提供的 NTP 守护进程 (chronyd) 预设为将本地计算机硬件时钟用作时间参考。硬件时钟的精度在很大程度上取决于其时间源。例如,原子钟或 GPS 接收器是精确的时间源,而普通的 RTC 芯片不是可靠的时间源。YaST 简化了 NTP 客户端的配置。
在 YaST NTP 客户端配置 ( › ) 窗口中,您可以指定何时启动 NTP 守护进程、配置源的类型以及添加自定义时间服务器。
您可以选择何时启动 NTP 守护进程的三种选项
选择 以手动启动 chrony 守护进程。
选择 以定期设置系统时间,而无需永久运行的 chrony。您可以设置 。
选择 以在系统启动时自动启动 chronyd。建议使用此设置。
chrony 从 /etc/chrony.conf 文件读取其配置。要使计算机时钟保持同步,您需要告诉 chrony 使用哪些时间服务器。您可以使用特定的服务器名称或 IP 地址,例如
0.suse.pool.ntp.org 1.suse.pool.ntp.org 2.suse.pool.ntp.org 3.suse.pool.ntp.org
您还可以指定一个 池 名称。池名称解析为多个 IP 地址
pool pool.ntp.org
要同步同一网络上多台计算机上的时间,我们不建议将它们全部与外部服务器同步。一个好的做法是让一台计算机成为时间服务器,该服务器与外部时间服务器同步,而其他计算机充当其客户端。将 local 指令添加到服务器的 /etc/chrony.conf 中,以将其与权威时间服务器区分开来
local stratum 10
要启动 chrony,请运行
systemctl start chronyd.service
初始化 chronyd 后,需要一段时间才能使时间稳定,并创建用于校正本地计算机时钟的漂移文件。使用漂移文件,可以在计算机上电时计算硬件时钟的系统误差,从而立即使用校正,从而提高系统时间的稳定性。
要启用该服务,以便 chrony 在启动时自动启动,请运行
systemctl enable chronyd.service
yast-timesync.service 服务除了 chronyd.service 服务之外,openSUSE Leap 还包括 yast-timesync.service。 yast-timesync.service 由定时器每 5 分钟触发一次,并使用 -q 选项运行 chronyd 以设置系统时间并退出。由于任何给定时间只能运行一个 chronyd 实例,因此请勿同时启用或启动这两个 chronyd 相关服务。
您可以使用 chronyc 在运行时更改 chronyd 的行为。它还会生成关于 chronyd 操作的状态报告。
您可以以交互式或非交互式模式运行 chronyc。要以交互式方式运行 chronyc,请在命令行中输入 chronyc。它会显示一个提示符并等待您的命令输入。例如,要检查有多少 NTP 源在线或离线,请运行
#chronycchronyc> activity 200 OK 4 sources online 2 sources offline 1 sources doing burst (return to online) 1 sources doing burst (return to offline) 0 sources with unknown address
要退出 chronyc 的提示符,请输入 quit 或 exit。
如果您不需要使用交互式提示符,请直接输入命令
#chronycactivity
使用 chronyc 所做的更改不是永久性的。下次 chronyd 重新启动后,它们将丢失。对于永久更改,请修改 /etc/chrony.conf。
有关所有 chronyc 命令的完整列表,请参阅其手册页 (man 1 chronyc)。
虽然 chronyd 在没有网络连接的情况下启动的系统上正常启动,但该工具无法解析配置文件中时间服务器的 DNS 名称。
chronyd 会在不断增加的时间间隔内尝试解析由 server、pool 和 peer 指令指定的时钟服务器名称,直到成功为止。
如果 chronyd 启动时时间服务器不可用,您可以指定 offline 选项
server server_address offline
chronyd 然后将不会尝试轮询服务器,直到使用以下命令启用它
# chronyc online server_address如果设置了 auto_offline 选项,chronyd 会假定时钟服务器在向其发送了两次请求而未收到响应后已离线。此选项避免了在断开网络连接时从 chronyc 运行 offline 命令的需要。
软件包 chrony 依赖于其他程序(例如 gpsd)通过 SHM 或 SOCK 驱动程序访问时序数据。使用 /etc/chrony.conf 中的 refclock 指令指定要用作时间源的硬件参考时钟。它有两个强制参数:驱动程序名称和特定于驱动程序的参数。这两个参数后跟零个或多个 refclock 选项。 chronyd 包括以下驱动程序
PPS - 用于内核 每秒脉冲 API 的驱动程序。例如
refclock PPS /dev/pps0 lock NMEA refid GPS
SHM - NTP 共享内存驱动程序。例如
refclock SHM 0 poll 3 refid GPS1 refclock SHM 1:perm=0644 refid GPS2
SOCK - Unix 域套接字驱动程序。例如
refclock SOCK /var/run/chrony.ttyS0.sock
PHC - PTP 硬件时钟驱动程序。例如
refclock PHC /dev/ptp0 poll 0 dpoll -2 offset -37 refclock PHC /dev/ptp1:nocrossts poll 3 pps
有关各个驱动程序的选项的更多信息,请参阅 man 8 chrony.conf。