# Linux 时间同步(chrony) ## 场景 服务器时间偏了几分钟,日志对不上、证书校验失败、集群心跳异常。 ## 前置条件 - root 权限 - 知道内网 NTP 服务器地址(没有就先用公网的) - 123/udp 能出去或者能到内网源 ## 配置 ```bash # 安装 dnf install -y chrony || apt install -y chrony # 指向内网源 cat >/etc/chrony.conf <<'EOF' server ntp1.corp.local iburst server ntp2.corp.local iburst driftfile /var/lib/chrony/drift makestep 1.0 3 rtcsync logdir /var/log/chrony EOF systemctl enable --now chronyd ``` `makestep 1.0 3` 的意思是:启动后的前三次同步允许直接跳时间,超过 1 秒就跳。 ## 验证 ```bash chronyc sources -v # ^* 表示当前使用的源 chronyc tracking # 看偏移量 timedatectl status date ``` `System clock synchronized: yes` 才算同步好。 ## 回滚 ```bash systemctl disable --now chronyd ``` 改成手动时间: ```bash timedatectl set-ntp false timedatectl set-time "2026-10-18 18:00:00" ``` ## 坑 - **虚拟机上别开 `rtcsync` 太频繁**,宿主机会把时间带偏。 - 时间偏差太大时 chrony 默认会「慢慢追」,用 `makestep` 才会立刻跳。 - 防火墙挡了 123/udp,`chronyc sources` 里全是 `?`。 - 容器里同步时间没意义,应该同步宿主机。 - 域环境里的 Linux 可以直接指向域控,不用单独维护 NTP。 - 改完记得看 `timedatectl`,`NTP synchronized: no` 说明没生效。