在 Linux 系统管理中,精确的系统时间是日志审计、分布式协作、安全认证的基石。时间偏差可能导致认证失败、数据错乱甚至服务中断。本文将系统介绍三大主流时间同步工具:经典的 ntpdate(一次性同步)、传统的 ntpd(守护进程)以及现代的 chrony,从基础用法、诊断命令到选型建议,为你提供一份完整的操作参考。


一、ntpdate:经典的一次性时间同步工具

ntpdate 是一个历史悠久的命令行工具,用于手动、一次性地通过网络时间协议(NTP)调整系统时间。它简单直接,但在最新 Linux 发行版中逐渐被 chrony 取代,在老旧系统或临时校正场景仍有使用价值。

1.1 基本用法

sudo ntpdate [选项] NTP服务器地址
  • 核心功能:立即向指定 NTP 服务器查询时间,并跳跃式平滑式修改系统时钟。
  • 常见示例(使用阿里云 NTP,推荐 -u 参数避免防火墙问题):
sudo ntpdate -u ntp.aliyun.com

1.2 常用选项

选项作用适用场景
-u使用非特权端口(>1024)发送请求推荐日常使用,穿透防火墙
-q仅查询时间偏移,不修改系统时钟测试连通性、查看偏差
-d调试模式,显示详细同步过程排查同步故障
-b强制使用“跳跃”方式(step),即使偏差小于 0.5 秒系统启动时快速设时
-B强制使用“平滑”调整(slew)避免时间跳跃影响应用
-t指定超时时间(秒)高延迟网络

1.3 注意事项与常见错误

  • 设置计划任务自动同步(不推荐生产环境):

    0 * * * * /usr/sbin/ntpdate -u ntp.aliyun.com > /dev/null 2>&1
  • 同步硬件时钟ntpdate 只改系统时间,需额外执行 hwclock -w 写入 BIOS。
  • 常见错误

    • command not found:安装 ntpdate 包(Ubuntu: apt install ntpdate,CentOS: yum install ntpdate)。
    • no server suitable for synchronization found:检查网络、防火墙,确认是否遗漏 -u
  • 冲突提醒:如果系统已运行 ntpdchronyd 服务,直接运行 ntpdate 可能失败或建议停止服务。

1.4 时间调整机制:Step vs Slew

  • Step(跳跃):误差 > 0.5 秒时,时间直接跳变。速度快,但可能打断日志连续性或服务状态。
  • Slew(平滑):误差 < 0.5 秒时,通过微调时钟频率逐渐修正。对系统影响小,但耗时长。

二、ntpd:传统 NTP 守护进程

ntpd 是经典 NTP 协议的守护进程实现,通过持续跟踪多个时间源、平滑调整系统时钟,保证长期准确。它在 RHEL/CentOS 6、Ubuntu 14.04 及更早版本中广泛使用。

2.1 核心配置文件:/etc/ntp.conf

典型配置片段:

server ntp.aliyun.com iburst
server time.cloudflare.com iburst
restrict default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
  • iburst:加速初始同步。
  • restrict:控制访问权限。

启动服务:

sudo systemctl start ntpd      # 或 service ntpd start
sudo systemctl enable ntpd

2.2 主要诊断命令

2.2.1 ntpq —— 查询 NTP 守护进程状态(最常用)

ntpq 通过 mode 6 协议获取 ntpd 内部信息,无需 root

命令作用
ntpq -p列出所有时间源(类似 chronyc sources
ntpq -c as显示所有关联(association ID)的简要状态
ntpq -c "rv <assoc_id>"查看特定关联的详细变量
ntpq -c sysinfo显示系统时间同步整体信息
ntpq -c peers-p

ntpq -p 输出示例

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ntp.aliyun.com  10.137.38.86    2 u  34   64  377   13.427   -0.213   1.002
+time.cloudflare 10.136.38.86    3 u  12   64  377   21.104   +0.045   0.875
-ntp.ubuntu.com  193.79.237.14   2 u  52   64  377   31.209   -2.341   1.234
  • * 当前同步源,+ 候选源,- 不可用,x 假时间源。
  • st:Stratum 层级(数值越小越接近权威时钟)。
  • reach:八进制可达性寄存器,377 表示最近 8 次轮询全部成功。
  • offset:本地时钟与服务器的偏差(毫秒级),越小越好。

2.2.2 ntpstat —— 快速查看同步状态

$ ntpstat
synchronised to NTP server (203.135.36.5) at stratum 3
   time correct to within 47 ms
   polling server every 64 s

输出清晰说明是否同步、误差范围、轮询间隔。若未同步,会显示 unsynchronised

2.2.3 ntpdc —— 交互式控制(已过时,不推荐)

ntpdc 使用废弃的 mode 7 协议,新版 ntpd 默认禁用,仅用于极老旧系统排查。日常使用 ntpq 即可。

2.3 补充诊断手段

  • 服务状态systemctl status ntpd
  • 防火墙:确保 UDP 123 端口开放
  • 日志journalctl -u ntpd/var/log/messages

三、chrony:现代 NTP 客户端/服务器

chrony 是新一代时间同步软件,专为不稳定的网络环境、高精度要求设计。它以后台守护进程 chronyd 运行,提供更快的同步速度和更丰富的监控命令。目前已是 RHEL/CentOS 7+、Ubuntu 16.04+ 的默认 NTP 工具。

3.1 基本配置与启动

配置文件 /etc/chrony/chrony.conf

server ntp.aliyun.com iburst
server time.cloudflare.com iburst
allow 192.168.0.0/16       # 允许客户端访问(如需作为服务器)

启动服务:

sudo systemctl start chronyd
sudo systemctl enable chronyd

3.2 主要诊断命令(chronyc

3.2.1 chronyc tracking —— 整体跟踪状态

$ chronyc tracking
Reference ID    : B97DBE7B (ntp.aliyun.com)
Stratum         : 3
System time     : 0.000000004 seconds slow of NTP time
Last offset     : +0.001758954 seconds
Leap status     : Normal
  • Leap status 应为 Normal
  • Last offset 为最近一次偏差。

3.2.2 chronyc sources -v —— 列出时间源

$ chronyc sources -v
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* ntp.aliyun.com               2   10   377   187   -209us[ -209us] +/- 32ms
^+ time.cloudflare.com          3   10   377   185  -4382us[-4382us] +/- 23ms
  • MS 列:^* 当前同步源,^+ 候选源,^- 质量不佳,^? 不可达。
  • Reach 列:八进制可达性,377 表示最近 8 次成功。
  • Last sample:本地与服务器的偏差。

3.2.3 timedatectl status —— 系统层面确认

$ timedatectl status
System clock synchronized: yes
NTP service: active

无需 chronyc 依赖,快速确认 NTP 是否启用且已同步。

3.3 高级排查命令

命令用途
chronyc sourcestats -v显示每个源的详细统计(样本数、标准偏差等),Std Dev 越小源越稳定。
chronyc activity查看在线/离线源的数量。
chronyc ntpdata显示每个源的 NTP 协议原始数据包细节。
chronyc -n sources禁止 DNS 反向解析,直接显示 IP。

3.4 一次性查询模式:chronyd -Q(替代 ntpdate -q

chronyd -Q 可以在不启动后台服务的情况下,以一次性查询模式获取指定 NTP 服务器的时间偏差,无需 root 权限,是 ntpdate -q 的完美替代。

chronyd -Q 'server ntp.aliyun.com iburst'

输出示例:

2024-01-15T10:30:22Z chronyd version 4.2 starting
2024-01-15T10:30:24Z System clock wrong by -0.123456 seconds (ignored)
特性ntpdate -qchronyd -Q
权限要求root无需 root
是否修改时间
支持 iburst 加速不支持支持(推荐)

四、三大工具对比总结

特性ntpdatentpdchrony
工作模式一次性命令,手动运行持续守护进程,自动平滑调整持续守护进程,自动平滑调整
时间调整方式默认 step(>0.5s)或 slew默认 slew(可配置 step)默认 slew,支持 step 阈值
对网络波动适应较好优秀(支持服务器离线、漂移补偿)
硬件时钟补偿支持支持,更完善
监控命令无(仅 -q 查询)ntpq, ntpstatchronyc 系列
一次性查询(无需 root)需要 root不支持chronyd -Q 无需 root
典型适用系统老旧发行版或临时脚本CentOS 6 / Ubuntu 14.04 及更早RHEL 7+ / Ubuntu 16.04+
当前推荐度仅限特定场景维护中,新装不推荐强烈推荐

五、选型与使用建议

5.1 场景驱动选择

场景推荐工具理由
生产服务器长期时间同步chrony精度高、抗网络波动、日志清晰、资源占用低。
传统系统(如 CentOS 6)维护ntpd系统内置,稳定可靠,需掌握 ntpqntpstat
一次性校正明显时间偏差ntpdatechronyd -Q && chronyc makestepntpdate 简单粗暴;chrony 方式更安全可控。
临时查询某个 NTP 服务器的时间chronyd -Q无需 root,灵活安全。
容器或嵌入式环境chrony轻量、启动快、支持网络中断恢复。

5.2 最佳实践

  • 新部署系统:直接使用 chrony,放弃 ntpdatentpd
  • 已有 ntpd 系统:评估是否迁移到 chrony(主流发行版已默认切换,迁移简单)。
  • 避免同时运行多个时间服务ntpdatentpdchronyd 不能并发,否则冲突。
  • 定期监控:建议设置监控项检查 timedatectl statuschronyc tracking,确保同步健康。

5.3 快速参考:常用命令速查表

需求ntpd 环境chrony 环境
列出时间源ntpq -pchronyc sources -v
查看同步状态ntpstatntpq -c sysinfochronyc tracking
查看源统计ntpq -c "rv <assoc_id>"chronyc sourcestats -v
一次性查询服务器时间ntpdate -q <server>(需 root)chronyd -Q 'server <server> iburst'(无需 root)
重启服务systemctl restart ntpdsystemctl restart chronyd
检查服务状态systemctl status ntpdsystemctl status chronyd

六、总结

  • ntpdate 是历史产物,适合一次性手动校时,但不适合后台自动同步。
  • ntpd 是经典的 NTP 守护进程,在旧系统上仍然可靠,新部署不建议选用。
  • chrony 是现代标准,功能更强大、适应性更好,是所有新系统的首选。

掌握这三者的基本用法和诊断命令,能让你在面对各种 Linux 发行版的时间同步问题时游刃有余。特别是 chrony 带来的 chronyd -Q 无需 root 查询功能,以及 chronyc sources -v 的直观输出,大大提升了运维效率。

本文基于 RHEL/CentOS 6/7+、Ubuntu 14.04/16.04+ 等主流发行版实践整理。如有疑问或补充,欢迎交流讨论。

最后修改:2026 年 04 月 15 日
如果觉得我的文章对你有用,请随意赞赏