Linux NTP同步失败主因是时间源不可达、服务未运行、配置冲突或硬件时钟异常;需依次确认服务状态(chronyd/systemd-timesyncd)、验证NTP端口连通性、排除多服务冲突、校准硬件时钟。

Linux NTP 同步失败,核心是时间源不可达、服务未运行、配置冲突或硬件时钟异常。排查要从状态确认入手,再逐层验证网络、配置和系统设置。
确认当前时间服务状态
先看系统用的是哪个时间服务:chronyd、systemd-timesyncd 还是 ntpd。多数现代发行版默认启用 chronyd 或 systemd-timesyncd,但可能未实际运行。
- 检查 chronyd:systemctl status chronyd,若显示 inactive 或 failed,需启动并设为开机自启
- 检查 systemd-timesyncd:systemctl status systemd-timesyncd,注意它默认启用但可能因冲突被禁用
- 运行 timedatectl 查看整体状态,重点关注:
Network time on: 应为 yes
NTP enabled: 应为 yes(表示已开启自动同步)
RTC in local TZ: 推荐为 no(即硬件时钟使用 UTC)
验证时间源连通性与可用性
NTP 使用 UDP 123 端口,不依赖 ICMP,所以 ping 通不代表能同步。必须测试端口可达性及服务器响应。
- 用 ntpq -pn(chronyd)或 chronyc sources -v 查看是否识别到有效源;若 remote 列为空或全是 ×,说明无可用服务器
- 测试 NTP 端口:用 nc -uz pool.ntp.org 123 或 timeout 3 ntpdate -q ntp.aliyun.com,确认是否能收包
- 检查防火墙:iptables -L -n | grep 123 或 ufw status,确保 UDP 123 出站允许
- 云服务器额外检查安全组规则,必须放行 UDP 123 出方向
检查配置冲突与关键参数
多个时间服务共存(如 chronyd 和 systemd-timesyncd 同时启用)会互相抢占,导致同步失败甚至时间跳变。
- 禁用冗余服务:systemctl stop systemd-timesyncd && systemctl disable systemd-timesyncd(若已用 chronyd)
- chronyd 配置重点检查 /etc/chrony.conf:
是否有有效 server 行(如 server ntp.aliyun.com iburst)
是否启用了 makestep -1 10(允许首次校正超 1 秒的偏差) - systemd-timesyncd 配置检查 /etc/systemd/timesyncd.conf:
确保 NTP= 行未注释,且填入可信地址(如 NTP=ntp.aliyun.com)
排查硬件时钟与双系统干扰
重启后时间回退、跨时区显示异常,往往不是 NTP 问题,而是硬件时钟(RTC)设置不当所致。
- 对比时间:date 和 hwclock --show,若差几小时或几十年,说明 RTC 异常
- 同步硬件时钟:sudo hwclock --systohc(以系统时间为基准更新 RTC)
- 设 RTC 为 UTC 模式:sudo timedatectl set-local-rtc false(避免 Windows/Linux 双系统时间错乱)
- CMOS 电池老化会导致断电后 RTC 归零(如显示 1970 年),需更换主板电池










