这类问题我又碰上了一次。Ubuntu 22.04 上装了 chrony,systemd-timesyncd 也没停,结果 date 每隔几小时跳一次,日志时间戳前后错乱,业务订单时间对不上。

第一反应是「容器和宿主机都跑着时间同步,容器里的写入把宿主拉偏」,验证下来不成立。

原因不止一个,得分开看。两个时间服务同时改系统时钟,各自往自己的源上拉;chronyd 的 makestep 设置太激进,每次偏差都直接跳变;虚拟化平台的时钟源不稳定,两个服务互相纠偏。

先确认哪个服务在管时间

timedatectl && systemctl status chronyd systemd-timesyncd --no-pager

再往下停掉多余的时间服务并禁用

systemctl disable --now systemd-timesyncd

调整 chrony 的步进策略

grep -nE 'makestep|maxslewrate' /etc/chrony/chrony.conf

剩下的就是观察偏差是否收敛

chronyc tracking && chronyc sources -v

恢复的判定其实很直接。timedatectl 显示 NTP service 为 active 且只由一个服务提供,chronyc tracking 的 offset 稳定在毫秒级,日志时间戳不再跳变。

补一句。两个时间服务同时存在是常见坑,云镜像里经常预装 timesyncd;容器默认继承宿主时钟,别在容器里再起一个 ntpd。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189