应优先使用chronyd,因其是rhel 8+/centos 8+、ubuntu 20.04+等现代linux系统的默认且唯一推荐服务,ntpd已被弃用;配置文件为/etc/chrony.conf,验证命令为chronyc tracking和chronyc sources -v。

chronyd 是现代 Linux 系统(RHEL 8+/CentOS 8+、Ubuntu 20.04+)默认且唯一推荐的时间同步服务,ntpd 已被弃用;强行启用 ntpd 会导致 systemctl start ntpd 静默失败,或 ntpq -p 报 Connection refused。
确认你该用 chrony 还是 ntpd
先检查系统实际在跑什么:
-
systemctl is-active chronyd—— 应返回active -
systemctl is-active ntpd—— 若为active,必须先停用:systemctl disable --now ntpd -
rpm -q chrony(RHEL/CentOS)或dpkg -l | grep chrony(Debian/Ubuntu)确认已安装
若系统是 RHEL 8+、Ubuntu 20.04+ 或 Fedora,默认就该用 chronyd,别碰 ntpd。配置文件是 /etc/chrony.conf,验证命令是 chronyc tracking 和 chronyc sources -v,不是 ntpq。
客户端:快速连上内网 NTP 服务器
你只是想让本机向局域网已有时间源(比如 192.168.100.10)同步,那就只动 server 行,其他全删或注释掉:
- 编辑
/etc/chrony.conf,确保有且仅有一行:server 192.168.100.10 iburst - 删掉所有
pool行或公网server行(混用内外网源会漂移) -
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
服务器端:开放给内网设备同步的关键配置
把一台 Linux 当作局域网时间源,核心不是“能不能对外提供”,而是“客户端能否发现并信任”:
- 在
/etc/chrony.conf中添加允许网段,格式必须是 CIDR:allow 192.168.100.0/24(不是mask 255.255.255.0,chrony不认) - 确认没锁死监听地址:
bindaddress或bindcmdaddress不能是127.0.0.1,否则外部请求收不到 - 硬件时钟写入必须开启:在
/etc/sysconfig/chronyd(RHEL/CentOS)或/etc/default/chrony(Debian/Ubuntu)中设SYNC_HWCLOCK=yes - 客户端测试命令:
chronyc -h 192.168.100.10 sources,若显示^?表示不可达,优先查防火墙和allow规则
强制校准大幅偏差时间
系统时间偏差超过 5 分钟时,chronyd 默认拒绝步进同步,需手动触发:
- 先确保
/etc/chrony.conf中有makestep 1 -1(表示对任意偏差都允许一步到位) - 重启服务:
systemctl restart chronyd - 执行:
chronyc makestep—— 立即生效,无需等待收敛 - 注意:
makestep不会自动写入硬件时钟,校准后仍需hwclock --systohc手动落盘
时间同步不是“配一次就完事”,chrony 的行为高度依赖角色定义(客户端 or 服务器)、allow 网段精度、UDP 123 端口可达性,以及硬件时钟是否被写回——这四点漏掉任一,chronyc sources -v 就永远显示 ^? 或 ~。











