Linux 服务器时间总漂移?chrony 对时一次讲清
服务器时间跑偏,乍看只是差了几秒,实际却可能让订单时间错乱、日志对不上号、证书提前过期、分布式锁和定时任务接连出问题。很多时候并不是系统“坏了”,而是本地时钟一直在以自己的速度走,和标准时间越差越远。对大多数 Linux 服务器来说,chrony 是目前最省心的对时工具:它既能在开机时把时间拉回来,也能在运行中持续、平滑地修正偏差。
一、时间为什么会漂移
普通服务器靠主板晶振计时,晶振本身就有微小误差,温度变化、负载波动都会放大它。虚拟机还会遇到宿主机调度、快照恢复、挂起后再恢复等情况,客户机时钟可能一下子跳变。容器共享宿主机时钟,宿主机不准,容器也跟着不准。所以对时不能只靠某一次手动校准,而要有一个常驻服务持续盯着。
二、安装并启动 chrony
主流发行版都自带 chrony,没有的话用包管理器安装即可:
# RHEL / CentOS / openEuler 系
dnf install -y chrony
# Debian / Ubuntu 系
apt install -y chrony
systemctl enable --now chronyd
systemctl status chronyd
注意服务名在不同发行版里可能是 chronyd 或 chrony,启动失败时先用 systemctl status 看具体报错,不要凭感觉反复重启。
三、配置时间源
配置文件一般是 /etc/chrony.conf。时间源要选离自己近、稳定可靠的上游,数量不用多,三到四个就够了,太多反而互相干扰。
pool pool.ntp.org iburst
server ntp.aliyun.com iburst
makestep 1.0 3
rtcsync
其中 iburst 表示首次同步时加快探测,makestep 1.0 3 表示开机前三次检测中、偏差超过 1 秒时允许直接步进校正,rtcsync 表示把系统时间定期写回硬件时钟。改完配置要重启服务:systemctl restart chronyd。生产环境改配置前,先备份原文件,并确认防火墙放行了 UDP 123 端口,否则时间源再好也同步不上。
四、用 chronyc 看同步状态
chrony 自带 chronyc 命令,不用猜测,直接看数据:
chronyc tracking
chronyc sources -v
chronyc activity
tracking 里最值得看的是 Stratum(层级,数字越小越接近标准源)、System time(当前系统时间与参考时间的偏差)、Last offset(上一次修正量)和 Leap status(闰秒状态)。sources -v 里带星号的源是当前正在使用的源,Reach 为 377 说明最近 8 次探测全部成功;如果 Reach 很低或长时间为 0,基本可以判定网络或上游源有问题。
五、chrony 和 ntpdate 有什么区别
ntpdate 是一次性工具:执行一次就把时间直接跳到目标值,简单粗暴,但正在运行的数据库、消息队列和定时任务可能被跳变打乱。chrony 默认采用平滑修正:偏差小时慢慢追,偏差大时才步进,运行中的业务更不容易受惊。ntpdate 更适合装机初始化或时钟已经差了很远、服务尚未启动的场景;日常对时,优先用 chrony 常驻服务。
六、漂移排查清单
时间还是不准时,按这个顺序查:一是 chronyc sources 是否有可用源,Reach 是否正常;二是 timedatectl 看时区是不是 Asia/Shanghai,NTP service 是否为 active;三是云服务器是否同时开了宿主机时间同步,导致两边互相打架;四是检查 UDP 123 是否被安全组或防火墙拦截;五是看系统日志有没有 chronyd 报错。多数问题出在前两项,改一堆配置之前,先把状态输出看清楚。
一句话总结:先用 chronyc tracking 和 sources 确认“现在差多少、有没有可靠源”,再决定改配置还是放行端口。对时这件事,持续、平滑、可观测,比某一次手动敲对更重要。
- 点赞
- 收藏
- 关注作者
评论(0)