Oamc

Linux 时间同步(chrony)

本页目录

场景

服务器时间偏了几分钟,日志对不上、证书校验失败、集群心跳异常。

前置条件

  • root 权限
  • 知道内网 NTP 服务器地址(没有就先用公网的)
  • 123/udp 能出去或者能到内网源

配置

# 安装
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 秒就跳。

验证

chronyc sources -v      # ^* 表示当前使用的源
chronyc tracking        # 看偏移量
timedatectl status
date

System clock synchronized: yes 才算同步好。

回滚

systemctl disable --now chronyd

改成手动时间:

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 说明没生效。