阿里云 ECS 时间慢 8 小时排查:一次云服务器迁移遗留 NTP 配置故障复盘

2026年8月9日20:28:05 发表评论 阅读(92)

阿里云 ECS 时间慢 8 小时排查:一次云服务器迁移遗留 NTP 配置故障复盘

背景

之前,服务器到期,刚好阿里云有活动,便把服务器从腾讯云迁移到了阿里云 ECS。 迁移完成后,网站、数据库、WordPress 等业务均可以正常运行,因此没有继续检查服务器底层配置。

后来,在 WordPress 后台编辑文章时发现一个异常: “文章发布时间比本地时间慢了 8 个小时”。

例如:

  • 本地时间已经是上午;
  • WordPress 编辑器显示的发布时间却仍然是凌晨。

由于刚好相差 8 小时,第一反应通常会认为:

  • 是不是 WordPress 时区配置错误?

但进一步排查发现,WordPress 本身没有问题,真正异常的是服务器系统时间。

最终定位到:

云服务器迁移后,系统中的 chrony 配置仍然保留着腾讯云 NTP 地址,而该地址依赖原云厂商网络环境,在迁移到阿里云 ECS 后无法继续正常提供时间同步服务。

这也是在云服务器迁移中容易忽略的一类问题:

系统能够启动、业务能够运行,并不代表迁移已经完整。

故障现象

首先检查服务器当前时间:

date

输出:

Sun Aug 9 01:17:51 CST 2026

查看 UTC 时间:

date -u

输出

Sat Aug 8 17:17:53 UTC 2026

进一步检查时区和 NTP 状态:

date +"%F %T %Z %z"

timedatectl status

关键输出:

2026-08-09 01:18:01 CST +0800

以及:

Local time: Sun 2026-08-09 01:18:06 CST
Universal time: Sat 2026-08-08 17:18:06 UTC
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: no
RTC in local TZ: yes

从这里可以得到三个重要信息:

  1. 系统时区已经是:
Asia/Shanghai

并且:

+0800

正确。

  1. 本地时间和 UTC 时间之间的转换关系没有问题。
  2. NTP 服务虽然启用,但是实际上没有完成同步。

因此:

这不是简单的时区错误,而是服务器系统时间本身发生了偏移。

先区分:时区错误还是系统时间错误?

“服务器慢 8 小时”通常有两种可能。

情况一:时区配置错误

例如服务器时间本身正确:

2026-08-09 09:00 UTC

但是系统显示时使用了 UTC:

Time zone: UTC (+0000)

这种情况只需要修改时区:

timedatectl set-timezone Asia/Shanghai

情况二:系统时间本身错误

本次故障属于这种情况。

表现:

Time zone: Asia/Shanghai

已经正确。

但是:

date

显示的时间仍然比真实时间慢 8 小时。

这说明:

  • 时区没有问题;
  • 系统维护的实际时间错误;
  • NTP 没有成功校准系统时钟。

检查 chrony 时间同步状态

当前系统使用 chrony 作为 NTP 客户端。

首先查看时间源:

chronyc sources -v

异常输出:

210 Number of sources = 0


  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          xxxx = estimated error.

MS Name/IP address         Stratum Poll Reach LastRx Last sample

这里最关键的是:

Number of sources = 0

意味着:

  • chronyd 服务可能正常运行;
  • 但是没有任何有效 NTP 时间源;
  • 没有时间源,就无法校准系统时间。

因此:

NTP synchronized: no

就是必然结果。

找到真正原因:遗留腾讯云 NTP 配置

继续检查 chrony 配置:

grep -Ev '^[[:space:]]*(#|$)' /etc/chrony.conf

输出:

server ntpupdate.tencentyun.com iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
logdir /var/log/chrony

问题出现:

当前服务器已经运行在阿里云ECS。

但是配置文件仍然:

server ntpupdate.tencentyun.com iburst

也就是说:

服务器迁移了,但时间同步配置没有迁移。

完整故障链路: 

腾讯云迁移到阿里云
        |
        ↓
保留原系统配置文件
        |
        ↓
/etc/chrony.conf 仍使用腾讯云 NTP
        |
        ↓
旧 NTP 地址依赖原环境,当前环境无法同步
        |
        ↓
chrony 没有有效时间源
        |
        ↓
NTP synchronized: no
        |
        ↓
系统时间长期偏移
        |
        ↓
WordPress 发布时间错误

修复方案

1. 备份 chrony 配置

修改配置前先备份:

cp -a /etc/chrony.conf /etc/chrony.conf.bak-20260809

这样如果修改后出现异常,也可以快速恢复。

2. 替换旧 NTP 时间源

打开 chrony 配置:

vi /etc/chrony.con

删除原来的腾讯云时间源:

server ntpupdate.tencentyun.com iburst

替换为阿里云 ECS 推荐时间源:

server ntp.cloud.aliyuncs.com iburst
server ntp7.cloud.aliyuncs.com iburst
server ntp8.cloud.aliyuncs.com iburst
server ntp9.cloud.aliyuncs.com iburst

保留其他 chrony 配置,最终配置示例:

server ntp.cloud.aliyuncs.com iburst
server ntp7.cloud.aliyuncs.com iburst
server ntp8.cloud.aliyuncs.com iburst
server ntp9.cloud.aliyuncs.com iburst

driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
logdir /var/log/chrony
说明:

阿里云 ECS 内网时间源依赖云环境支持,不同地域和实例环境可能存在差异。

配置NTP服务确保实例时间准确-云服务器 ECS(ECS)-阿里云帮助中心

3. 使用命令方式替换时间源

如果不想手动编辑配置文件,也可以直接替换:

先备份:

cp -a /etc/chrony.conf /etc/chrony.conf.bak-20260809

删除已有时间源:

sed -i '/^[[:space:]]*server[[:space:]]/d' /etc/chrony.conf

追加新的时间源:

cat >> /etc/chrony.conf <<'EOF'
server ntp.cloud.aliyuncs.com iburst
server ntp7.cloud.aliyuncs.com iburst
server ntp8.cloud.aliyuncs.com iburst
server ntp9.cloud.aliyuncs.com iburst
EOF

执行完成后检查:

grep -Ev '^[[:space:]]*(#|$)' /etc/chrony.conf

确认配置是否正确。

4. 重启 chronyd 服务

启用服务:

systemctl enable chronyd

重启:

systemctl restart chronyd

查看时间源:

chronyc sources -v

如果系统时间偏差较大,可以执行:

chronyc makestep

强制立即校正时间。

需要注意:

本次故障中系统时间偏差约8小时。

makestep会让系统时间直接跳跃,而不是缓慢调整。

生产环境执行前,应确认:

  • 是否有依赖精确时间的业务;
  • 是否正在执行定时任务;
  • 是否会影响日志排序;
  • 是否会影响数据库时间。

验证修复结果

1. 验证系统时间

执行:

date

date -u

date +"%F %T %Z %z"

正常状态:

  • date显示当前北京时间;
  • date -u显示当前 UTC 时间;
  • 两者相差 8 小时;
  • 当前时间与真实时间一致;

需要注意:

  • 北京时间和 UTC 相差 8 小时是正常现象。
  •  两个时间是否都对应当前真实时刻。

2. 验证 chrony 同步状态

查看同步状态:

chronyc tracking

查看时间源:

chronyc sources -v

正常情况下应该至少存在一个有效时间源:

^* ntp.cloud.aliyuncs.com
^+ ntp7.cloud.aliyuncs.com
^+ ntp8.cloud.aliyuncs.com

状态含义:

  • ^*:当前正在使用的时间源;
  • ^+:可用的候选时间源;
  • ^?:时间源无法访问;
  • Number of sources = 0:没有任何时间源;

再次检查:

timedatectl status

目标状态:

Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no

3. 修复 RTC 配置

排查过程中发现:

RTC in local TZ: yes

Linux 服务器通常推荐:

硬件时钟 RTC 保存 UTC 时间,系统根据时区转换显示。

确认系统时间已经同步后执行

timedatectl set-local-rtc 0

hwclock --systohc --utc

再次检查:

timedatectl status

目标:

RTC in local TZ: no

这样可以避免未来:

  • 更换系统时区;
  • 跨云迁移;
  • 夏令时规则变化;

导致额外时间问题。

验证 WordPress 时间

服务器时间恢复后,再检查 WordPress:

WordPress 后台
    ↓
设置
    ↓
常规
    ↓
时区
    ↓
上海

确认:

时区:上海

然后:

  1. 清理页面缓存;
  2. 重新进入文章编辑页面;
  3. 检查发布时间;
  4. 测试定时发布功能;

如果服务器时间正确,WordPress 会自动读取正确系统时间。

如果 NTP 仍然无法同步

如果修改后:

chronyc sources -v

仍然没有有效时间源,可以继续检查。

1. 检查 DNS

getent hosts ntp.cloud.aliyuncs.com
getent hosts ntp7.cloud.aliyuncs.com
getent hosts ntp8.cloud.aliyuncs.com

如果无法解析:

检查:

cat /etc/resolv.conf

2. 检查 chronyd 日志

journalctl -u chronyd -n 50 --no-pager

3. 检查服务状态

systemctl status chronyd --no-pager

云服务器迁移后的检查清单

这次的经验不是:“记住修改一个 NTP 地址”,而是云服务器迁移后,需要重新检查所有绑定原云厂商环境的配置。

1. 时间同步配置

检查:

grep -RniE 'tencentyun|aliyuncs|ntp|chrony' \
/etc/chrony.conf \
/etc/ntp.conf \
/etc/systemd 2>/dev/null

确认:

  • 是否残留旧云厂商地址;
  • 时间同步服务是否正常。

2. 软件源配置

检查:

  • yum/dnf 源;
  • apt 源;
  • 镜像地址。

避免继续依赖旧云厂商镜像。

3. DNS 配置

检查:

cat /etc/resolv.conf

确认:

  • DNS 服务正常;
  • 云内网域名可以解析。

4. 云监控和 Agent

迁移后检查:

  • 原云厂商监控 Agent;
  • 日志采集 Agent;
  • 初始化脚本。

避免产生无效请求。

5. 网络策略

重点检查:

  • 安全组;
  • 防火墙;
  • SSH;
  • 数据库端口;
  • NTP UDP 123。

6. 定时任务

系统时间错误可能影响:

  • Cron;
  • systemd timer;
  • WordPress Cron;
  • 自动备份;
  • 证书检查。

检查:

crontab -l

systemctl list-timers --all

总结

这次故障表面上表现为:WordPress 后台文章发布时间比本地时间慢 8 小时。

但真正的问题链路是:

腾讯云迁移到阿里云 ECS
        |
        ↓
遗留腾讯云 NTP 配置
        |
        ↓
旧时间源无法正常同步
        |
        ↓
chrony 没有有效时间源
        |
        ↓
NTP synchronized: no
        |
        ↓
服务器系统时间长期偏移
        |
        ↓
WordPress 显示错误时间

最终修复步骤:

  1. 确认系统时区为 Asia/Shanghai;
  2. 发现 chronyc sources -v 返回 Number of sources = 0;
  3. 定位 /etc/chrony.conf 中残留的腾讯云 NTP 地址;
  4. 替换为阿里云 ECS 内网 NTP:ntp.cloud.aliyuncs.com;
  5. 重启 chronyd 并执行 chronyc makestep;
  6. 将 RTC 从本地时间调整为 UTC;
  7. 验证服务器时间、chrony 状态和 WordPress 后台时间。

迁移云服务器时,系统能启动并不代表迁移已经完整。像时间同步、DNS、软件源、监控 Agent、定时任务和安全组等基础设施配置,都应该纳入迁移后的检查清单。

 

 

weinxin
微信小程序
互联网开发,终身学习者,欢迎您的关注!
舍得

发表评论

不高兴 彩虹 吃瓜 丢翔 乖 滑稽 花心 惊哭 惊讶 挤眼 酷 伤心 帅吗? 礼物 玫瑰 怒 生气 喷 睡觉 太开心 小九九 啊
太阳 吐舌 委屈 笑眼 星星月亮 心碎 咦 阴险 疑问 真棒 偷笑 斜眼笑 震惊 略 哈欠 无奈哭 抠鼻 哼 期待 懒得理你 爱心 蜡烛