5154

Good Luck To You!

如何在CentOS系统中查看NTP服务同步状态?

在网络服务器管理和维护中,确保系统时间的准确性至关重要,精确的时间同步不仅关系到日志记录的准确性、分布式系统的协调性,还直接影响到诸如证书验证、安全审计等关键功能,在 CentOS 系统中,网络时间协议(NTP)是维持系统时间与标准时间源同步的核心机制,本文将详细介绍如何在不同版本的 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 参数会显示更详细的列标题,输出示例如下:

如何在CentOS系统中查看NTP服务同步状态?

  .-- 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 守护进程,检查其状态主要使用 ntpqntpstat 命令。

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

如果同步成功,会显示:

如何在CentOS系统中查看NTP服务同步状态?

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 未同步时,可以按以下步骤排查:

  1. 检查服务状态:确认 chronydntpd 服务正在运行。systemctl status chronydservice ntpd status
  2. 检查防火墙:确保防火墙允许 NTP 流量(UDP 端口 123)。firewall-cmd --list-all
  3. 检查配置文件:查看 /etc/chrony.conf/etc/ntp.conf,确认配置的时间源服务器地址正确且可用。
  4. 测试网络连通性:使用 pingnc -u <server_ip> 123 测试到 NTP 服务器的网络连接。

相关问答FAQs

问题1:chronyc tracking 输出中的 Last offsetRoot delay 有什么核心区别?

解答Last offset(上次偏移量)指的是你的本地系统时钟与 NTP 时间源之间的时间差,它告诉你“我的时钟快了或慢了多少”,而 Root delay(根延迟)指的是从你的服务器到顶层时间源(Stratum 1)的网络传输总延迟,它告诉你“一个时间校准请求从我的电脑出发,再返回来,总共花了多少时间”,简而言之,offset 是时间误差,delay 是网络延迟。

问题2:为什么 timedatectl 显示 NTP synchronized: no,但 chronyd 服务是运行状态?

解答:这种情况通常有几个原因:

  1. 初始同步中chronyd 刚启动时,需要一定时间(通常是几分钟)来收集足够的数据并完成首次同步,在此期间,它会显示为未同步。
  2. 时间源不可达:配置文件中指定的 NTP 服务器可能因网络问题(防火墙阻塞、服务器宕机)而无法访问。
  3. 时间偏差过大:如果本地系统时间与标准时间相差太大(超过1000秒),chronyd 出于安全考虑会拒绝同步,需要手动校正时间或使用 chronyc forcestep 等命令强制步进。
  4. 配置错误/etc/chrony.conf 文件中的服务器地址配置错误,或使用了 deny 指令阻止了同步。 你可以通过 chronyc sources 查看各个时间源的状态,或查看 journalctl -u chronyd 的日志来定位具体原因。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2025年11月    »
12
3456789
10111213141516
17181920212223
24252627282930
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
    网站收藏
    友情链接

    Powered By Z-BlogPHP 1.7.3

    Copyright Your WebSite.Some Rights Reserved.