推荐chrony而非ntpd,因其在虚拟化、网络抖动大、间歇断网等场景下更稳:启动快、收敛快、支持离线fallback(local stratum 10)、资源占用低;CentOS 7+、RHEL 8+、Ubuntu 20.04+已默认弃用ntpd,强行安装易引发端口冲突或被系统自动替换。

为什么不用 ntpd 而推荐 chrony
CentOS 7+、RHEL 8+、Ubuntu 20.04+ 默认已弃用 ntpd,改用 chronyd。这不是“换着玩”,而是因为 chrony 在虚拟化环境、网络抖动大、间歇性断网(比如内网无外网)等场景下更稳:它能更快收敛时间偏差,支持离线 fallback(local stratum 10),且资源占用更低。强行装 ntpd 可能和 systemd 冲突,或被包管理器自动替换。
/etc/chrony.conf 关键配置项怎么填
服务端(即你要搭的内网时钟源)配置核心就三块,别堆一堆注释掉的 server 行:
-
server ntp.aliyun.com iburst—— 公网上游,阿里云 NTP 延迟低、国内可用;iburst是必须加的,首次同步加速 -
allow 192.168.10.0/24—— 替换成你内网真实网段,不写这行客户端连不上;别用allow 0.0.0.0/0开放全网 -
local stratum 10—— 离线保底机制:当公网失联时,本机自动降级为 stratum 10 的本地源,客户端仍可同步(只是精度略降) - 删掉所有
pool行和默认的server注释行,避免干扰
改完执行 systemctl restart chronyd,再用 chronyc sources -v 看是否标记了 *(当前活动源)和 ^(本地源)。
客户端只改一行就能连上内网NTP源
客户端不用装 ntpdate,也不用手动跑命令——那是临时补救,不是生产做法。正确方式是:
- 编辑
/etc/chrony.conf,把所有server行删光,只留一行:server 192.168.10.1 iburst(替换成你的服务端内网 IP) - 确认没残留
pool或其他server,否则 chronyd 会优先连公网源,绕过你的内网服务器 - 执行
chronyc makestep强制立即同步(尤其适用于偏差 > 1 秒时) - 用
chronyc tracking检查System time offset是否在 ±50ms 内,chronyc sources -v看是否显示*指向你的内网 IP
硬件时钟和系统时钟不同步?先关掉 UTC 自动校正
很多内网服务器重启后时间跳变,根源不在 NTP,而在 BIOS 时间解释方式。Linux 默认可能把硬件时钟当 UTC,但 Windows 和多数国产 BIOS 把它当本地时间(CST)。结果就是:
- chronyd 同步完系统时间 → 执行
hwclock --systohc→ 把带 +0800 偏移的时间写进 BIOS → 下次开机 BIOS 按 UTC 解读,显示快 8 小时 - 解决办法:统一设为本地硬件时钟模式:
timedatectl set-local-rtc 1 --adjust-system-clock - 执行后检查:
timedatectl status中RTC in local TZ应为yes;hwclock -r输出应和date接近(误差几秒内)
这一步漏掉,哪怕 NTP 同步再准,每次重启都归零——内网集群里最常被忽略的硬伤。


















