适用于 Linux 主机出现日志时间跳变、证书突然无效、定时任务错过或分布式租约异常,且怀疑系统时间的场景。命令基线为 systemd 245+;chronyc 部分适用于 chrony 4.0+。读取系统日志和时间同步配置通常需要 root。先保留故障窗口,不要一开始就执行 date -s、hwclock --hctosys 或同时启动多个同步服务。
1. 固定三个口径:UTC、本地时区和同步状态
date -u --iso-8601=ns
date --iso-8601=ns
timedatectl status
timedatectl show -p Timezone -p LocalRTC -p NTP -p NTPSynchronized
readlink -f /etc/localtime
Timezone 只影响时间的显示和解释,不能修复系统时钟偏差;NTPSynchronized=yes 表示系统当前认为时钟已同步,但不能替代偏移量和时间线证据。LocalRTC=yes 表示硬件时钟按本地时间解释,在双系统、夏令时或镜像迁移时更容易产生歧义。先记录原值,不要在事故中直接改时区掩盖偏差。
还应确认实际由哪个服务管理时间:
systemctl --no-pager --type=service --state=running \
| grep -E 'systemd-timesyncd|chronyd|chrony|ntpd|ntpsec'
不同发行版的单元名不同,空结果也不能证明没有同步程序;还需结合已安装的软件和进程检查。多个守护进程同时校时会让偏移和日志难以解释,应按发行版与既有配置只保留一个明确的管理者,但服务切换属于变更操作。
2. 按实际同步实现读取状态
使用 systemd-timesyncd 时:
timedatectl timesync-status
journalctl -u systemd-timesyncd --since '-2 hours' --no-pager -o short-iso
timesync-status 只适用于 systemd-timesyncd;使用 chrony 或其他实现时返回不可用,不代表主机未同步。使用 chrony 时:
chronyc tracking
chronyc sources -v
chronyc sourcestats -v
执行 chronyc 需要能访问本机 chronyd 的控制接口。tracking 中应重点保留 Stratum、System time、Last offset、RMS offset、Root dispersion、Update interval 和 Leap status;sources -v 中 ^* 表示当前选中的服务器。单次偏移很小不足以闭环,应覆盖多个轮询周期观察是否收敛、是否反复更换来源。
3. 区分渐进校正、时间跳变和主机暂停
NTP 守护进程可能通过 slew 缓慢调整频率,也可能在启动或偏差过大时 step,使墙上时间直接跳变。先把同步日志与内核、启动和暂停时间线放到同一个 UTC 窗口:
journalctl -k --since '-2 hours' --no-pager -o short-iso \
| grep -Ei 'clocksource|timekeeping|suspend|resume'
last -x | head -n 20
cat /proc/uptime
虚拟机快照恢复、宿主机暂停、休眠恢复和不稳定的 clocksource 都可能制造突然偏移。/proc/uptime 只是当前启动周期内的辅助证据,不能单独区分这些原因。若是虚拟机,还应从获准的虚拟化平台侧核对暂停、迁移和快照事件;不要仅凭来宾系统的一条日志下结论。
系统时间向前或向后跳都可能影响 TLS 校验、缓存过期、选主租约、数据库事务时间戳和定时任务。人工强制校时前必须评估这些组件,较大的 step 应放在受控窗口,并遵循同步服务和应用自身的处置流程。
4. 系统时间正确但应用仍显示错误时
在应用的实际运行边界内对比,而不是只检查宿主机:
env TZ=UTC date --iso-8601=ns
env TZ=Asia/Shanghai date --iso-8601=ns
容器通常共享宿主机的实时时钟,但可以有不同的时区文件或 TZ 环境变量;应用运行时、数据库会话和日志采集器也可能各自转换时区。检查时应保留原始时间戳、UTC 偏移和时区名称,并确认日志是否在采集端被二次转换。只有显示固定差几个小时,而 UTC 时间与事件先后顺序一致时,才更像时区解释问题;时间戳发生倒退或偏移不断变化,应继续查同步与暂停分支。
5. 验证修复
修复后至少覆盖多个同步轮询周期,确认只有一个时间管理者;systemd 报告 NTPSynchronized=yes,或 chrony 保持选中来源且 offset、dispersion 收敛;同步日志没有连续失联、反复 step 或来源切换;宿主机与应用边界中的 UTC 时间一致;证书校验、调度任务、租约和数据库复制等受影响功能恢复。
不要只以 date 看起来正确作为结论。应记录同步实现及版本、来源、故障前后偏移、UTC 时间线和虚拟化事件,让“配置错误、网络不可达、主机暂停、时钟源问题、应用时区”可以被分别复核。