Linux 实例:配置 NTP 服务

最近更新时间:2025-03-14 15:31:52

我的收藏

操作场景

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

TencentOS/CentOS/RHEL
Ubuntu/Debian
sudo yum install chrony
sudo apt install chrony

配置 chrony

TencentOS/CentOS/RHEL
Ubuntu/Debian
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/chrony
logdir /var/log/chrony
# 打印每个 ntp 包的 rawmeasurements,一般在调试或问题排查时使用
log rawmeasurements
# 打印 tracking 日志,用来记录系统时钟的整体状态
log tracking

# (可选)监听 NTP 端口(默认是 udp 123),作为 NTP server 向其他机器提供 NTP 服务
# allow all

# 配置 NTP 服务器
server time1.tencentyun.com iburst
server time2.tencentyun.com iburst
server time3.tencentyun.com iburst
server time4.tencentyun.com iburst
server time5.tencentyun.com iburst

启动 chrony

TencentOS/CentOS/RHEL
Ubuntu/Debian
sudo systemctl restart chronyd # 重启 chronyd 服务

sudo systemctl enable chronyd # 开机自动启动 chronyd
sudo systemctl restart chrony # 重启 chrony 服务

sudo systemctl enable chrony # 开机自动启动 chrony

检查 chrony 状态

TencentOS/CentOS/RHEL
Ubuntu/Debian
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 的命令如下:
TencentOS/CentOS/RHEL
Ubuntu 16 ~ 22/Debian 10, 11
sudo yum remove ntp
sudo apt remove ntp

安装 ntpd

TencentOS/CentOS/RHEL
Ubuntu 16 ~ 22/Debian 10, 11
sudo yum install ntp
注意:
如果安装命令报类似“Unable to find a match: ntp”的错误,则一般是软件源中没有ntp导致。(ntp 包太旧,已经停止维护。)
sudo apt install ntp
sudo apt install ntpdate
注意:
一些比较新的发行版,如 Ubuntu 24.04、Debian 12等,软件源已经不再提供ntp,将ntp替换成了ntpsec。这种情况下建议考虑优先使用 chrony 同步时间。

配置 ntpd

ntpd 的配置文件一般位于/etc/ntp.conf,如下是配置文件示例。
# 配置 NTP 服务器
server time1.tencentyun.com iburst
server time2.tencentyun.com iburst
server time3.tencentyun.com iburst
server time4.tencentyun.com iburst
server time5.tencentyun.com iburst

启动 ntpd

TencentOS/CentOS/RHEL
Ubuntu 16 ~ 22/Debian 10, 11
sudo systemctl restart ntpd # 重启 ntpd 服务

sudo systemctl enable ntpd # 开机自动启动 ntpd
sudo systemctl restart ntp # 重启 ntp 服务

sudo systemctl enable ntp # 开机自动启动 ntp

检查 ntpd 状态

TencentOS/CentOS/RHEL
Ubuntu 16 ~ 22/Debian 10, 11
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:用来衡量系统时钟频率的抖动。