ntp自动同步需同时满足服务运行、配置有效源、udp 123端口畅通三条件;timedatectl仅是开关,实际依赖chronyd或ntpd,二者不可共存,推荐chronyd并配置阿里云源及makestep。

NTP自动同步不是装完服务就自动生效的,必须确认服务在跑、配置指向有效源、且网络能通UDP 123端口——三者缺一不可。
检查NTP是否真正启用并运行
很多人执行 sudo timedatectl set-ntp true 后就以为万事大吉,但 timedatectl status 显示 NTP synchronized: no 是常态。这不是“还没同步好”,而是底层根本没有可用的NTP客户端在工作。
- 先看实际运行的服务:
systemctl list-units | grep -E "(ntpd|chronyd)"—— 如果没输出,说明ntpd或chronyd根本没启动 - 再查端口监听:
ss -uln | grep :123—— 如果没结果,要么服务没起来,要么被防火墙拦了(firewall-cmd --list-ports看是否开了123/udp) -
timedatectl只是开关,它不自带实现;它背后依赖的是ntpd或chronyd,二者不能共存,选一个配到底
用 chronyd 替代 ntpd 更稳妥
CentOS 8+/RHEL 8+ 和大多数新发行版默认用 chronyd,它比传统 ntpd 更适合虚拟机、断网频繁或时钟漂移大的场景。强行用 ntpd 反而容易卡在“unsynchronized”状态。
- 安装并启用:
sudo yum install chrony -y && sudo systemctl enable --now chronyd - 立即强制校正大偏差:
sudo chronyc makestep(这个命令只在/etc/chrony.conf中有makestep行才有效,建议加makestep 1 -1) - 验证同步状态:
chronyc tracking看Offset是否在毫秒级;chronyc sources -v看有没有带*的活动源 - 国内推荐源(替换
/etc/chrony.conf中的server行):server ntp.aliyun.com iburst或server ntp1.aliyun.com iburst
ntpd 配置里最容易踩的三个坑
如果因兼容性必须用 ntpd(比如旧系统或审计要求),这几个地方几乎必出问题:
-
/etc/ntp.conf里没删掉默认的pool.ntp.org行,但服务器根本连不上公网——得换成可信内网源或国内地址,例如:server s1b.time.edu.cn iburst - 忘记加
iburst参数:首次同步慢得离谱,甚至超时失败;加上后会发 8 个包加速握手 -
driftfile路径权限不对:/var/lib/ntp/drift必须由ntp用户可写,否则服务启动成功但无法记录时钟漂移,久而久之又偏了 - 时间偏差 > 1000 秒时,
ntpd默认拒绝同步(防跳变),得先手动用ntpdate -s [server]强制校准(注意:该命令在 systemd 系统上可能被禁用,优先走chronyc makestep)
防火墙和 SELinux 是静默杀手
UDP 123 端口不通,NTP 就是单向失联。但错误不会报在日志里,只会表现为“无响应”“unsynchronized”。
- iptables/firewalld:
sudo firewall-cmd --add-service=ntp --permanent && sudo firewall-cmd --reload - SELinux:
getsebool ntpd_disable_trans查是否被限制;若为 off,临时放开:sudo setsebool -P ntpd_disable_trans 1 - 云服务器还要检查安全组——很多阿里云/腾讯云实例默认封 UDP 123,必须手动放行
最常被忽略的一点:NTP 同步不是“一次对准就永远准”。它靠持续微调抵消硬件晶振漂移。如果你看到 chronyc tracking 输出的 Offset 在 ±5ms 内缓慢变化,才是健康状态;如果一直是 0.000 或长期不动,反而说明没在真正跟踪。











