现代linux系统默认用chronyd而非ntpd,rhel8+/ubuntu20.04+等必须使用chronyd;轻量环境可用systemd-timesyncd但精度低;配置前须确认服务状态并停用ntpd,避免冲突。

现代 Linux 系统默认用 chronyd,不是 ntpd;强行启用 ntpd 会导致 systemctl start ntpd 静默失败,或 ntpq -p 报错 Connection refused。选错工具,后面所有配置都白搭。
确认你该用 chronyd 还是 systemd-timesyncd
先看系统版本和用途:
• RHEL 8+/CentOS 8+、Fedora、Ubuntu 20.04+:必须用 chronyd,ntpd 已被移除或不兼容
• 轻量环境(如容器、边缘设备、CI/CD 构建机):可用 systemd-timesyncd,但只支持 SNTP,精度低、无服务端能力
• 检查当前运行的服务:systemctl is-active chronyd 或 systemctl is-active systemd-timesyncd
• 若 ntpd 在运行,先停掉:systemctl disable --now ntpd
chronyd 客户端快速配置(连内网 NTP 服务器)
目标明确:本机向局域网已有时间源(如 192.168.100.10)同步,不对外提供服务。
只需改三处,其余全注释或删掉:
- 编辑
/etc/chrony.conf,确保只有一行有效server:server 192.168.100.10 iburst(iburst加速首次同步) - 注释掉所有其他
server行(特别是pool.ntp.org类公网源),避免内外混用导致时钟漂移 - 重启服务:
systemctl restart chronyd,立刻验证:
–chronyc tracking:看System time是否为OK
–chronyc sources -v:目标 IP 前应有*(正在使用),不是^?(不可达) - 若仍不同步,检查防火墙:
firewall-cmd --list-ports | grep 123,没输出就加:firewall-cmd --permanent --add-port=123/udp && firewall-cmd --reload
chronyd 服务端配置(让本机当局域网时间源)
核心不是“开服务”,而是让客户端能发现、连接并信任你:
• 在 /etc/chrony.conf 中添加允许网段:allow 192.168.100.0/24(注意格式,不能写成 mask 255.255.255.0)
• 确保没锁死监听地址:检查是否有 bindaddress 127.0.0.1 或 bindcmdaddress 127.0.0.1,有就注释掉
• 开放 UDP 123 端口(防火墙和云安全组都要放行)
• 写入硬件时钟(断电后不归零):
– RHEL/CentOS:在 /etc/sysconfig/chronyd 中设 HARDWARECLOCK=yes
– Ubuntu/Debian:加 makestep 1 3 和 hwclockfile /etc/adjtime 到 /etc/chrony/chrony.conf
ntpdate 和 timedatectl 的适用边界
它们不是替代方案,而是辅助手段:
• ntpdate 是一次性强制同步工具,仅用于大偏差场景(如系统时间差几小时):ntpdate -q 192.168.100.10 测试连通性,成功后再启 chronyd
• timedatectl set-ntp true 本质是启用 systemd-timesyncd,不是启动 chronyd;它与 chronyd 冲突,二者不能共存
• 所有同步前,务必确认时区正确:timedatectl set-timezone Asia/Shanghai,否则 UTC 对了,本地时间仍错
最常被忽略的一点:chronyc sources -v 输出里,每个源的延迟(MS列)和偏移(Offset列)会随时间波动,但只要持续显示 * 且 Offset 在 ±50ms 内,就是健康状态;盯着单次数值猛调配置,反而容易引入问题。











