系统时间不同步会引发证书失效、日志错乱等真实故障,需按四步排查:先验timedatectl状态与偏移;再查chronyd/ntpd服务冲突;接着验证UDP 123端口连通性及防火墙;最后分析硬件晶振漂移与时区、虚拟机同步配置。

系统时间不同步不是“看起来不准”的小问题,而是会直接触发证书失效、日志错乱、主从复制卡死、Kerberos认证拒绝等真实故障的根因。排查不能只看date输出,得沿着时间链条一层层验证。
第一步:确认当前时间状态是否可信
别急着修,先看清楚现状:
- 运行
timedatectl status,重点看三行:
System clock synchronized: yes/no(仅表示最近一次同步尝试成功,不保证精度)
Network time on: yes(说明网络校时已启用)
RTC in local TZ: 应为no(硬件时钟建议设为UTC,避免双系统冲突) - 执行
timedatectl timesync-status,关注Offset:值——这是当前系统时钟与上游源的实际偏差,单位是秒。持续大于±1s就需干预;超过±5s通常已影响业务。 - 用
hwclock --compare对比硬件时钟和系统时钟。若差值长期>5分钟,说明RTC老化或未同步,重启后时间可能跳变。
第二步:检查时间服务是否正常运行且无冲突
多个时间服务共存是常见雷区,会导致互相抢占、时间震荡甚至倒退:
- 查活跃服务:
systemctl list-units --type=service | grep -E "(chrony|ntp|timesync)"
若chronyd和systemd-timesyncd同时active,必须停掉后者:sudo systemctl disable --now systemd-timesyncd - chrony用户看
chronyc tracking:Offset应稳定在毫秒级;Skew若>1000 ppm,说明本地晶振漂移严重;Root dispersion过大(>100ms)则上游链路不可靠。 - ntpd用户用
ntpq -p确认是否有*标记的有效源;若全为x或~,说明未同步或源不可达。
第三步:验证网络连通性与防火墙策略
NTP走UDP 123端口,这个端口常被安全策略忽略:
- 测试连通性:
ntpdate -q ntp.aliyun.com(不修改时间,只查响应)
若报no server suitable for synchronization found,可能是DNS不通或目标不可达。 - 检查本地防火墙:
sudo iptables -L -n | grep :123或sudo ufw status | grep 123
确保OUTPUT方向UDP 123未被DROP。 - 云环境优先用内网NTP地址(如阿里云
100.100.32.138、AWS169.254.169.123),绕过安全组限制,延迟更低。
第四步:定位硬件与配置层面深层问题
如果以上都正常但偏移仍缓慢增大,问题可能在底层:
- 查晶振漂移率:
adjtimex -p | grep frequency
输出如frequency = 123456,换算成ppm(百万分之一)。绝对值>±500 ppm说明硬件时钟老化,需更换主板电池或启用chrony的makestep兜底。 - 确认时区设置正确:
timedatectl set-timezone Asia/Shanghai(显示问题≠同步问题,但混淆判断)。 - 虚拟机注意宿主机时间源:KVM/QEMU建议开启
host time sync;Windows宿主机+Linux虚拟机共存时,统一设为UTC可避免整小时偏差。











