先把当时的情况摆出来。CentOS 7 上 timedatectl 显示 System clock synchronized: yes,NTP synchronized: yes,可和标准时间一比差四十秒,日志时间整体偏,定时任务也跟着错位。

原因不止一个,得分开看。chronyd 启动时只步进一次,之后靠逐渐 slewing 追,偏移大时要追很久。还有一种是配置里没写 makestep,chrony 拒绝大步调整时间。

还有一种情况,虚拟机的 kvm-clock 有漂移,宿主机自己没同步,客机跟着偏。

先看真实偏移与同步源

chronyc tracking; chronyc sources -v

允许超过一秒就步进校正

在 /etc/chrony.conf 写 makestep 1.0 3

立即强制校正一次

chronyc makestep

复核系统时间与状态

timedatectl; date -u

这次没动代码,只在配置和运行环境上找原因。

隔了一天再看,现象没变,说明不是偶发。

那几天正好在做别的变更,先把时间线对齐才敢动手。

别只看报错消失,验证要多做一步。chronyc tracking 里 System time 的 offset 降到 1 秒内、Last offset 接近 0,timedatectl 的 synchronized 为 yes 且 date 与标准时间差小于 1 秒。

synchronized yes 只说明在同步,不说明已经追上;makestep 对数据库类服务要慎重,跳变可能让事务时间戳异常。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189