在网络服务器管理和维护中,确保系统时间的准确性至关重要,精确的时间同步不仅关系到日志记录的准确性、分布式系统的协调性,还直接影响到诸如证书验证、安全审计等关键功能,在 CentOS 系统中,网络时间协议(NTP)是维持系统时间与标准时间源同步的核心机制,本文将详细介绍如何在不同版本的 CentOS 系统中检查 NTP 的同步状态,并提供相关的故障排查思路。

使用 timedatectl 进行通用检查
对于使用 systemd 的现代 CentOS 版本(如 CentOS 7 及以上),timedatectl 是一个功能强大且直观的命令行工具,可以一站式查看系统时间、时区以及 NTP 同步状态。
timedatectl
执行该命令后,你会看到类似以下的输出:
Local time: Tue 2025-10-24 10:30:15 CST
Universal time: Tue 2025-10-24 02:30:15 UTC
RTC time: Tue 2025-10-24 02:30:16
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
NTP synchronized: yes 是最关键的信息,它明确指出系统时间已成功通过 NTP 进行同步,如果显示 no,则表明同步存在问题。NTP enabled: yes 表示 NTP 服务(通常是 chronyd)已配置为开机自启。
使用 chrony 进行状态检查 (CentOS 7/8 及更高版本)
从 CentOS 7 开始,chrony 取代了传统的 ntpd,成为默认的 NTP 客户端和服务端实现。chrony 在虚拟机和不稳定网络环境下表现更为出色,其主要的控制工具是 chronyc。
查看同步状态详情
要获取详细的同步状态信息,可以使用 chronyc tracking 命令:
chronyc tracking
输出示例如下:
Reference ID : C0A80105 (192.168.1.5)
Stratum : 3
Ref time (UTC) : Tue Oct 24 02:29:58 2025
System time : 0.000001523 seconds fast of NTP time
Last offset : +0.000012345 seconds
RMS offset : 0.000023456 seconds
Frequency : 2.345 ppm fast
Root delay : 0.023456789 seconds
Root dispersion : 0.001234567 seconds
Leap status : Normal
- Reference ID: 当前正在同步的上游服务器的 IP 地址或名称。
- Stratum: 时间服务器的层级,Stratum 1 是直接连接到原子钟等权威设备的服务器,数值越小,精度越高。
- System time: 本地系统时间与 NTP 时间源的偏差。
fast表示本地时间快于 NTP 时间,slow则表示慢于。 - Last offset: 上一次时间校正的偏移量。
- RMS offset: 偏移量的均方根值,用于衡量时间偏差的稳定性。
- Frequency: 本地时钟的频率误差,单位是 ppm(parts per million,百万分之几)。
- Root delay: 到顶层时间服务器的网络总延迟。
- Root dispersion: 最大的时间误差估算。
- Leap status: 闰秒状态,通常为
Normal。
查看时间源信息
chronyc sources 命令可以列出所有配置的时间源及其状态:
chronyc sources -v
-v 参数会显示更详细的列标题,输出示例如下:

.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| / '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
|| .- xxxx [ yyyy ] +/- zzzzz
|| Reachability register (octal) -. | xxxx = adjustment offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 192.168.1.5 2 6 377 41 +12us[ +23us] +/- 15us
^+ 203.107.6.88 1 6 377 42 -15us[ -15us] +/- 17us
^? 10.0.0.1 0 6 0 - +0ns[ +0ns] +/- 0ns
每一行开头的字符非常重要:
- 表示当前系统正在与此源同步。
- 表示此源是可用的,并参与了时间综合计算。
- 表示此源是可用的,但未被综合算法采用。
- 表示此源当前不可达。
x: 表示此源的时间可能存在错误。- 表示此源的时间变化太大。
使用 ntpd 进行状态检查 (CentOS 6 及更早版本)
在 CentOS 6 等较旧的系统中,ntpd 是标准的 NTP 守护进程,检查其状态主要使用 ntpq 和 ntpstat 命令。
ntpq -p 查看对等体列表
ntpq -p 命令会显示一个列表,包含所有配置的 NTP 服务器及其状态。
ntpq -p
输出示例如下:
remote refid st t when poll reach delay offset jitter
==============================================================================
*ntp1.aliyun.com 10.137.38.86 2 u 512 1024 377 5.123 0.456 0.234
+ntp2.aliyun.com 10.137.38.86 2 u 511 1024 377 5.456 0.789 0.345
下表解释了各列的含义:
| 列名 | 含义 |
|---|---|
remote |
NTP 服务器的域名或 IP 地址。 |
refid |
远程服务器同步的更上层服务器。 |
st |
Stratum,层级。 |
t |
类型,u 表示 unicast(单播)。 |
when |
距离上次成功同步请求的秒数。 |
poll |
轮询间隔,单位是秒,以2的幂次方增长。 |
reach |
一个八进制值,表示最近8次轮询的可达性,377(八进制)表示全部成功。 |
delay |
网络延迟,单位毫秒。 |
offset |
时间偏差,单位毫秒。 |
jitter |
抖动,表示时间偏差的波动范围。 |
行首字符的含义与 chronyc sources 类似, 表示当前同步源, 表示候选同步源。
ntpstat 查看同步状态
ntpstat 命令提供一个非常简洁的同步状态报告。
ntpstat
如果同步成功,会显示:

synchronised to NTP server (203.107.6.88) at stratum 2
time correct to within 98 ms
polling server every 64 s
如果未同步,则会明确提示:
unsynchronised
time server re-starting
polling server every 64 s
故障排查基本思路
当发现 NTP 未同步时,可以按以下步骤排查:
- 检查服务状态:确认
chronyd或ntpd服务正在运行。systemctl status chronyd或service ntpd status。 - 检查防火墙:确保防火墙允许 NTP 流量(UDP 端口 123)。
firewall-cmd --list-all。 - 检查配置文件:查看
/etc/chrony.conf或/etc/ntp.conf,确认配置的时间源服务器地址正确且可用。 - 测试网络连通性:使用
ping或nc -u <server_ip> 123测试到 NTP 服务器的网络连接。
相关问答FAQs
问题1:chronyc tracking 输出中的 Last offset 和 Root delay 有什么核心区别?
解答:Last offset(上次偏移量)指的是你的本地系统时钟与 NTP 时间源之间的时间差,它告诉你“我的时钟快了或慢了多少”,而 Root delay(根延迟)指的是从你的服务器到顶层时间源(Stratum 1)的网络传输总延迟,它告诉你“一个时间校准请求从我的电脑出发,再返回来,总共花了多少时间”,简而言之,offset 是时间误差,delay 是网络延迟。
问题2:为什么 timedatectl 显示 NTP synchronized: no,但 chronyd 服务是运行状态?
解答:这种情况通常有几个原因:
- 初始同步中:
chronyd刚启动时,需要一定时间(通常是几分钟)来收集足够的数据并完成首次同步,在此期间,它会显示为未同步。 - 时间源不可达:配置文件中指定的 NTP 服务器可能因网络问题(防火墙阻塞、服务器宕机)而无法访问。
- 时间偏差过大:如果本地系统时间与标准时间相差太大(超过1000秒),
chronyd出于安全考虑会拒绝同步,需要手动校正时间或使用chronyc forcestep等命令强制步进。 - 配置错误:
/etc/chrony.conf文件中的服务器地址配置错误,或使用了deny指令阻止了同步。 你可以通过chronyc sources查看各个时间源的状态,或查看journalctl -u chronyd的日志来定位具体原因。