操作场景
chrony 和 ntpd 都能以非跳变的方式校准系统时间,保证系统时间的准确。本文主要介绍如何安装以及配置这两种时间同步工具。
注意事项
chrony 和 ntpd 二者冲突,建议从二者中选一个使用,另外一个可以卸载掉。如果同时安装了 chrony 和 ntpd,推荐您使用 chrony,禁用 ntpd 服务,禁用 ntpd 命令为:
sudo systemctl disable --now ntpd
。(Ubuntu 或者 Debian 可能需要使用 sudo systemctl disable --now ntp
命令来禁用 ntpd)如果部署 NTP 服务的机器也需要作为时钟源对外提供 NTP 服务,那么需要确保安全组放通 UDP 123端口,若未开放该端口,请参见 添加安全组规则 进行放行。
chrony 操作步骤
安装 chrony
sudo yum install chrony
sudo apt install chrony
配置 chrony
chrony 配置文件位于
/etc/chrony.conf
。chrony 配置文件位于
/etc/chrony/chrony.conf
。如下是配置文件示例。
# drift 文件用于记录之前时钟频率调整(单位是ppm)driftfile /var/lib/chrony/drift# chronyd 开启后的前三次时间调整,且时间差超过1.0秒才跳变调整时间makestep 1.0 3# 允许内核定期将系统时间同步到 RTC 时间rtcsync# TAI-UTC offset 和闰秒的信息leapsectz right/UTC# 日志输出到/var/log/chronylogdir /var/log/chrony# 打印每个 ntp 包的 rawmeasurements,一般在调试或问题排查时使用log rawmeasurements# 打印 tracking 日志,用来记录系统时钟的整体状态log tracking# (可选)监听 NTP 端口(默认是 udp 123),作为 NTP server 向其他机器提供 NTP 服务# allow all# 配置 NTP 服务器server time1.tencentyun.com iburstserver time2.tencentyun.com iburstserver time3.tencentyun.com iburstserver time4.tencentyun.com iburstserver time5.tencentyun.com iburst
启动 chrony
sudo systemctl restart chronyd # 重启 chronyd 服务sudo systemctl enable chronyd # 开机自动启动 chronyd
sudo systemctl restart chrony # 重启 chrony 服务sudo systemctl enable chrony # 开机自动启动 chrony
检查 chrony 状态
systemctl status chronyd # 查看 chronyd 服务状态,Active: active (running)表示正在运行systemctl is-enabled chronyd # 查看 chronyd 是否开机自动启动,enabled 表示开机自动启动
systemctl status chrony # 查看 chrony 服务状态,Active: active (running)表示正在运行systemctl is-enabled chrony # 查看 chrony 是否开机自动启动,enabled 表示开机自动启动
chronyd -Q # 向 NTP 服务器查询当前时间差,不修改系统时间chronyc sources -v # 查看时钟源的状态,有时钟源被星号*标记表示已同步chronyc tracking # 查看系统时钟状态
chronyc sources -v 指标简要说明
M
:对端类型,^
表示 server。S
:*
表示最优时钟源,+
表示按统计方式(加权平均)合入系统时钟的调整,-
表示未合入。Name/IP Address
:时钟源的域名/IP。Stratum
:表示时钟源的层级,正常取值1到15,16表示有异常。Poll
:log2轮询间隔,poll=4表示轮询间隔是24秒,即16秒。Reach
:表示近8个数据包的到达情况,八进制377表示近8个 ntp 包都没有丢。LastRx
:距离上一次收到通过校验的 ntp 包过了多久。单位一般为秒,具体以界面显示为准。Last sample
:用来衡量当前机器与时钟源的时间差,这里几个时间差是统计计算的中间结果。chronyc tracking 指标简要说明
Reference ID
:最优时钟源域名/IP。Stratum
:当前机器的层级。Ref time
:上次从时钟源计算指标的时间。System time
:非跳变调整的时间差。Last offset
:上一次时间差,正数表示本地时钟比服务器时钟快。RMS offset
:时间差的长期统计均值。Frequency
:表示如果 chrony 不调整时钟,系统时钟频率会差多少。Residual freq
:当前时钟频率与最优时钟源频率的差距。Skew
:频率误差界。Root delay
:到 stratum-1时钟源的 RTT(roud-time trip)。Root dispersion
:到 stratum-1时钟源的固有误差。Update interval
:两次时钟修正的间隔。Leap status
:闰秒状态。ntpd 操作步骤(不推荐)
注意:
当前 ntpd 官方已经不再维护,建议优先考虑将 ntpd 删除后,参考上文 chrony 操作步骤 配置 chrony 服务。
卸载 ntpd 的命令如下:
sudo yum remove ntp
sudo apt remove ntp
安装 ntpd
sudo yum install ntp
注意:
如果安装命令报类似“Unable to find a match: ntp”的错误,则一般是软件源中没有
ntp
导致。(ntp
包太旧,已经停止维护。)sudo apt install ntpsudo apt install ntpdate
注意:
一些比较新的发行版,如 Ubuntu 24.04、Debian 12等,软件源已经不再提供
ntp
,将ntp
替换成了ntpsec
。这种情况下建议考虑优先使用 chrony 同步时间。配置 ntpd
ntpd 的配置文件一般位于
/etc/ntp.conf
,如下是配置文件示例。# 配置 NTP 服务器server time1.tencentyun.com iburstserver time2.tencentyun.com iburstserver time3.tencentyun.com iburstserver time4.tencentyun.com iburstserver time5.tencentyun.com iburst
启动 ntpd
sudo systemctl restart ntpd # 重启 ntpd 服务sudo systemctl enable ntpd # 开机自动启动 ntpd
sudo systemctl restart ntp # 重启 ntp 服务sudo systemctl enable ntp # 开机自动启动 ntp
检查 ntpd 状态
systemctl status ntpd # 查看 ntpd 服务状态,Active: active (running)表示正在运行systemctl is-enabled ntpd # 查看 ntpd 是否开机自动启动,enabled 表示开机自动启动
systemctl status ntp # 查看 ntp 服务状态,Active: active (running)表示正在运行systemctl is-enabled ntp # 查看 ntp 是否开机自动启动,enabled 表示开机自动启动
ntpdate -q time1.tencentyun.com # 向 time1.tencentyun.com 这个 NTP 服务器查询当前时间差,不修改系统时间ntpq -p # 查看时钟源的状态,有时钟源被星号*标记表示已同步ntpq -c rv # 查看系统时钟状态
ntpq -p 指标简要说明
*, +, -
:分别表示最优时钟源、按统计方式(加权平均)合入系统时钟的调整、未合入时钟调整。remote
:时钟源。st
:时钟源层级。when
:上次收到 ntp 包的时间。poll
:log2轮询间隔,poll=3表示轮询间隔是23秒,即8秒。reach
:表示近8个数据包的到达情况,八进制377表示近8个 ntp 包都没有丢。offset
:时间差。jitter
:用来衡量 offset 的抖动。ntpq -c rv 指标简要说明
rootdelay
:到 stratum-1时钟源的 RTT(roud-time trip)。rootdisp
:到 stratum-1时钟源的固有误差。offset
:时间差。frequency
:系统时钟当前频率。sys_jitter
:不同时钟源间时间差的抖动。clk_jitter
:系统时钟时间差的抖动。clk_wander
:用来衡量系统时钟频率的抖动。