chrony 是比 ntpd 更适合现代 linux 环境的时间同步服务,需手动启用并配置 server、makestep 等关键参数,排查同步问题应优先使用 chronyc tracking 和 sources 命令。

Chrony 是比传统 ntpd 更适合现代 Linux 环境的时间同步服务,尤其在虚拟机、移动设备或网络不稳定的场景下表现更稳。它默认不开启,需要手动配置并启用。
chronyd 服务是否已安装并启用
多数新发行版(如 RHEL 8+/CentOS 8+、Ubuntu 20.04+)已预装 chrony,但未必开机自启。先确认状态:
systemctl is-active chronyd systemctl is-enabled chronyd
若返回 inactive 或 disabled,需启动并设为开机自启:
sudo systemctl start chronydsudo systemctl enable chronyd- 启动后建议立刻检查同步状态:
chronyc tracking(看System clock status是否为OK)
/etc/chrony.conf 中必须改的三处配置
默认配置通常只用 pool.ntp.org,延迟高且不可控。生产环境应指定可信、低延迟的 NTP 服务器,并关闭不必要的功能:
- 注释掉所有
pool行,改用server显式指定(例如国内可用server ntp.aliyun.com iburst) - 确保有
makestep 1.0 -1:允许系统时钟偏差超过 1 秒时强制校正(否则chronyd默认只缓慢调整,可能导致日志时间错乱) - 删掉或注释
rtcsync(除非你明确需要将系统时间写回硬件时钟;多数云主机不建议开)
改完重启:sudo systemctl restart chronyd
chronyc 命令查同步状态比 timedatectl 更准
timedatectl status 只显示是否“synchronized”,但不告诉你是否真的连上了上游、偏移多大。真正要排查问题,得用 chronyc:
-
chronyc tracking:看当前系统时钟与参考源的偏移(Offset)、估计误差(Root delay) -
chronyc sources -v:列出所有配置的 NTP 源及其状态(*表示当前主用源,+是备用,?表示未响应) -
chronyc makestep:手动触发一步校正(仅当makestep配置生效时才有效)
注意:chronyc 默认只能本地 socket 连接,远程访问需在 /etc/chrony.conf 加 cmdport 0 并配防火墙,不推荐。
云服务器或容器里 Chrony 同步失败的常见原因
很多用户发现 chronyc tracking 显示 Leap status : Not synchronised,其实多半不是配置错,而是环境限制:
- 某些公有云(如 AWS EC2)禁止客户直接同步到外部 NTP,要求使用其内网 NTP 服务(如
169.254.169.123) - Kubernetes Pod 内默认无法访问宿主机时钟,且
chronyd在容器中无法以 root 权限运行或绑定端口,此时应由节点统一同步,Pod 复用节点时间 - 防火墙(
ufw或firewalld)可能拦截 UDP 123 端口,临时关掉测试:sudo ufw disable
真正难调的不是配置语法,而是判断时间源是否可达、是否被平台策略限制——先跑通 chronyc sources 看有没有带 * 的行,再看 tracking 里的 offset 数值变化趋势。










