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