chronyd 是现代 Linux 系统(RHEL 8+/CentOS 8+、Ubuntu 20.04+)默认且唯一推荐的时间同步服务,ntpd 已被弃用;强行启用 ntpd 会导致 systemctl start ntpd 静默失败或 ntpq -p 报错 Connection refused。

chronyd 是现代 Linux 系统(RHEL 8+/CentOS 8+、Ubuntu 20.04+)默认且唯一推荐的时间同步服务,ntpd 已被弃用。强行启用 ntpd 会导致 systemctl start ntpd 静默失败,或 ntpq -p 报错 Connection refused。
确认你该用 chrony 还是 systemd-timesyncd
先查清系统实际在跑什么:
-
systemctl is-active chronyd—— 若返回active,就别碰ntpd或ntpdate -
systemctl is-active systemd-timesyncd—— 若为active且你只需轻量级客户端(如桌面机、临时测试机),它够用;但不支持手动强制步进、不兼容虚拟机漂移场景 -
rpm -q chrony(RHEL/CentOS)或dpkg -l | grep chrony(Debian/Ubuntu)—— 确保已安装 - 若
chronyd未运行,且ntpd正在运行:systemctl disable --now ntpd,再启用chronyd
chrony 客户端:连内网 NTP 服务器最简配置
你只是想让本机向局域网已有时间源(比如 192.168.100.10)同步,别改默认策略:
- 编辑
/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
chrony 服务器端:开放给内网设备的关键细节
把一台机器当内网时间源,常见失败不是“没启动”,而是“不允许访问”或“外部收不到”:
- 在
/etc/chrony.conf添加允许网段:allow 192.168.100.0/24(注意格式:不是mask 255.255.255.0,chrony不认) - 检查是否误配了
bindaddress 127.0.0.1或bindcmdaddress 127.0.0.1,这会让外部请求直接丢弃 - 确保 UDP 123 端口对外可访问(宿主机防火墙 + 云平台安全组都要放行)
- 写回硬件时钟必须开启:RHEL/CentOS 在
/etc/sysconfig/chronyd加HARDWARECLOCK=yes;Ubuntu 等需确认chronyd启动参数含-s或配置中含makestep
强制立即同步与硬件时钟写入
chronyc makestep 是唯一能处理大偏差(>1 秒)的可靠方式,但需提前配置允许步进:
- 编辑
/etc/chrony.conf,取消注释或添加:makestep 1 -1(表示对任意偏差都允许一步跳变) - 重启服务:
systemctl restart chronyd - 执行:
chronyc -a makestep(-a自动提权,避免权限错误) - 同步后务必写入硬件时钟:
hwclock --systohc,否则断电重启时间归零 - 注意:
timedatectl set-ntp true会接管并可能禁用chronyd,生产环境慎用
chrony 的角色(客户端 or 服务器)、allow 网段的 CIDR 格式、UDP 123 是否真正可达、以及硬件时钟是否写入——这四点任一遗漏,都会导致看似服务 running,实则完全不同步。


















