应优先使用chronyd而非ntpd,因rhel 8+/centos 8+、ubuntu 20.04+等主流发行版已默认弃用ntpd;需先通过rpm -q chrony或dpkg -l | grep chrony确认chrony安装状态,并用systemctl is-active ntpd检查ntpd是否运行,若active则须systemctl disable --now ntpd停用,再配置/etc/chrony.conf的server行(如server 192.168.100.10 iburst),删掉其他server行,重启chronyd后用chronyc tracking和sources -v验证同步状态,同时确保防火墙开放udp 123端口及allow网段配置正确。

chronyd 是你现在该用的工具,不是 ntpd。RHEL 8+/CentOS 8+、Ubuntu 20.04+ 等主流发行版已默认弃用 ntpd,强行启用会导致 systemctl start ntpd 静默失败,或 ntpq -p 报错 Connection refused。
怎么确认自己该用 chrony 还是 ntpd
先看系统实际在跑什么:
- 查
chrony是否已装:rpm -q chrony(RHEL/CentOS)或dpkg -l | grep chrony(Debian/Ubuntu) - 查
ntpd是否还在跑:systemctl is-active ntpd—— 如果返回active,立刻停掉:systemctl disable --now ntpd -
chronyc tracking能用,ntpq -p报错,基本就是chronyd在管时间
客户端:连内网 NTP 服务器(比如 192.168.100.10)
别改配置文件里无关的行,只动 server 行:
- 编辑
/etc/chrony.conf,确保只有一行有效server:server 192.168.100.10 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
服务器端:让本机对外提供时间服务
关键不是“开了没”,而是“客户端能不能连上并信任你”:
- 在
/etc/chrony.conf中添加允许网段:allow 192.168.100.0/24(注意格式,不能写mask 255.255.255.0) - 确认没锁死监听地址:
bindaddress或bindcmdaddress不能是127.0.0.1,否则外部请求收不到 - 硬件时钟写入必须开:
/etc/sysconfig/chronyd(RHEL/CentOS)或/etc/default/chrony(Debian/Ubuntu)中设SYNC_HWCLOCK=yes - UDP 123 端口必须开放,且安全组/防火墙放行
验证和排查常见卡点
很多问题出在“看似启动成功,其实没同步”:
-
timedatectl status显示System clock synchronized: yes≠ 实际同步了,它只反映 systemd-timesyncd 或 chrony 的状态,不校验来源是否可信 -
chronyc tracking的Offset值超过 ±1 秒,说明还没稳住;Skew太高(比如 >1000 ppm)可能硬件时钟漂移严重 - 客户端执行
chronyc sources -v看到^?(问号)表示不可达,大概率是服务端没开allow、防火墙挡了、或监听地址不对 - 虚拟机或云主机上,宿主机时间不准或启用了时钟同步(如 VMware Tools 的
timeSync),会干扰chronyd,需禁用宿主机时间同步
server,而是分清角色、选对工具、堵住防火墙、关掉冲突服务——这些细节漏一个,chronyc sources -v 就永远显示空列表。











