13 10 月 2026

时间不同步是个隐蔽杀手:日志时间错乱排查问题全对不上、crontab 定时任务早跑一小时晚跑一小时、SSL 证书校验失败、游戏服存档时间戳错乱、JWT 令牌直接失效。

这篇讲怎么设时区、怎么同步时间、怎么让时间永远准。命令都给,五分钟搞定。

需要云服务器可以看看财富云计算:NAT 型无独立公网 IP,价格比独立 IP 机型省一半以上,一键开服面板,主流游戏快速部署。

一、先看现状

# 看当前时间、时区
date

# 看时区设置
timedatectl

# 看时间同步服务状态
timedatectl status

正常输出应该类似:

               Local time: 二 2026-10-13 20:44:40 CST
           Universal time: 二 2026-10-13 12:44:40 UTC
                 Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
               NTP service: active

三个重点看:

  1. Time zone 是不是 Asia/Shanghai(国内服务器默认应该 CST +0800)
  2. System clock synchronized 是不是 yes
  3. NTP service 是不是 active

哪项不对,往下看对应章节。

二、设置时区

国内服务器统一用 Asia/Shanghai:

# systemd 系统(Ubuntu 16+/CentOS 7+/Debian 9+)
timedatectl set-timezone Asia/Shanghai

# 验证
date

老系统(无 systemd)或容器内:

# 方法1: 直接链到时区文件
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 方法2: Debian 系交互式配置
dpkg-reconfigure tzdata
# 选择 Asia → Shanghai

# 写入配置(部分程序读取这个)
echo 'Asia/Shanghai' > /etc/timezone

Docker 容器内时区不随宿主机,要单独设:

# Dockerfile 里
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

或者启动时挂载:-v /etc/localtime:/etc/localtime:ro。

Java 程序特别注意:JVM 有自己的时区设置,改系统时区后要重启 Java 进程才生效,或者在启动参数里指定 -Duser.timezone=GMT+8。

三、时间同步:NTP 服务配置

云服务器时间不准,一般是 NTP 服务没跑或者 NTP 服务器连不上。

systemd 系统(主流)

# 启用并启动时间同步
timedatectl set-ntp true

# 看同步状态
timedatectl status
# System clock synchronized: yes 就成了

配置国内 NTP 服务器

默认 NTP 源在国外,国内机器同步慢,换成阿里云、腾讯云的 NTP:

# systemd-timesyncd 配置
cat > /etc/systemd/timesyncd.conf <<'EOF'
[Time]
NTP=ntp.aliyun.com ntp.tencent.com cn.pool.ntp.org
FallbackNTP=ntp1.aliyun.com pool.ntp.org
EOF

systemctl restart systemd-timesyncd
timedatectl status

CentOS 7+ / RHEL 用 chrony

yum install -y chrony

# 配置国内源
cat > /etc/chrony.conf <<'EOF'
server ntp.aliyun.com iburst
server ntp.tencent.com iburst
server cn.pool.ntp.org iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
EOF

systemctl enable --now chronyd
chronyc sources -v    # 看同步状态

手动同步(救急)

# 安装 ntpdate
yum install -y ntpdate    # CentOS
apt install -y ntpdate    # Debian/Ubuntu

# 立即同步一次
ntpdate -u ntp.aliyun.com

# 或者用 chronyc 强制同步
chronyc makestep

四、时间不准会引发的具体故障

这些坑我都见过,列出来你对号入座:

故障现象根因
网站登录后立刻退出 / 令牌无效JWT 的 exp 基于时间,服务器时间比客户端快几分钟,令牌"已过期"
HTTPS 证书报 certificate is not yet valid系统时间比证书生效时间早
日志时间对不上,排查串时间线一台机器 UTC、一台 CST,差 8 小时
crontab 任务晚 1 小时跑时区设错,crontab -e 用的是系统时区
双因素认证(2FA)码总错TOTP 基于时间戳,偏差超过 30 秒就废
游戏服存档时间异常、回档混乱存档时间戳错乱,备份脚本按时间删文件删错
MySQL 主从同步延迟/报错主从时间差超过阈值

五、容器与虚拟机的时间陷阱

Docker 容器

容器默认继承镜像的时区设置,不是宿主机的。宿主机改了时区,容器里可能还是 UTC。

解决:启动加 -e TZ=Asia/Shanghai,或 Dockerfile 里装 tzdata 并设 ENV TZ。

虚拟机(VMware/VirtualBox)

VM 的时钟受宿主机影响,休眠恢复后容易漂移。装好 NTP 服务,漂移会被自动纠正(makestep 就是干这个的:偏差大时直接跳变,而不是慢慢调)。

云服务器

主流云厂商虚拟机默认时间同步正常,但有两个注意点:

  1. 不建议在云服务器上装 KVM 虚拟化后再跑 NTP 客户端——嵌套虚拟化时 NTP 可能和宿主冲突,用厂商的时钟源即可
  2. 部分云平台禁止修改硬件时钟,hwclock -w 可能无效,用 NTP 同步即可

六、验证时间同步真的在工作

# 方法1: 看同步状态
timedatectl status | grep -i synchronized

# 方法2: chrony 看偏移量
chronyc tracking
# 关注 System time 后面的偏移,应该在毫秒级

# 方法3: 对比标准时间(浏览器打开 time.is 对比)
date

# 方法4: 连续观察是否稳定
for i in {1..5}; do date '+%H:%M:%S'; sleep 2; done

偏移量超过几秒,检查 NTP 服务器是否可达:

# 测试 NTP 服务器连通性
nc -vuz ntp.aliyun.com 123

# 或看详细同步日志
journalctl -u systemd-timesyncd -n 30    # systemd
journalctl -u chronyd -n 30              # chrony

七、实战:排查一次时间不同步

场景:服务器 crontab 每天 4 点备份,但备份文件时间戳显示 12 点,且 HTTPS 偶发证书错误。

# 1. 看时区
date          # 显示 CST +0800,正常
timedatectl   # Time zone: Asia/Shanghai,正常

# 2. 看同步状态
timedatectl status
# System clock synchronized: no  ← 找到了!

# 3. 看 NTP 服务
systemctl status systemd-timesyncd
#  inactive (dead)  ← 服务没启用

# 4. 修复
timedatectl set-ntp true

# 5. 如果还是不同步,换国内源重启
cat > /etc/systemd/timesyncd.conf <<'EOF'
[Time]
NTP=ntp.aliyun.com ntp.tencent.com
EOF
systemctl restart systemd-timesyncd

# 6. 验证
timedatectl status   # synchronized: yes
date                 # 和 time.is 对比,一致

重启一次服务器确认开机自动同步也正常。

八、常见问题

Q:改了时区,crontab 还是按老时间跑?
cron 服务要重启:systemctl restart cron(Debian)或 systemctl restart crond(CentOS)。

Q:timedatectl set-ntp true 报错?
容器里没有 systemd 时不支持,改用 ntpdate 手动同步,或者装 chrony。

Q:时间同步了但和北京时间差几分钟?
时区选错了,确认是 Asia/Shanghai 而不是其他亚洲城市。timedatectl list-timezones | grep Shanghai 确认名字。

Q:云厂商有 NTP 服务器吗?
有,阿里云 ntp.aliyun.com、腾讯云 ntp.tencent.com、华为云 ntp.myhuaweicloud.com,用厂商的延迟最低。

小结

时间同步属于「设一次就忘、忘了就出事」的基础配置。三步搞定:设 Asia/Shanghai 时区 → 启用 NTP 并换国内源 → 用 timedatectl 验证 synchronized: yes。顺手检查一下 cron 和备份脚本的时间戳,能省掉一堆灵异故障。

更多运维教程见财富云计算知识库:crontab 计划任务、systemd 服务、日志管理、rsync 备份全系列。需要云服务器可以看看财富云计算:一键开服面板,NAT 型无独立公网 IP,价格比独立 IP 机型省一半以上。

延伸阅读
  1. 网站环境怎么选:LNMP 手动 / 宝塔面板 / Docker / 云开发
  2. 问卷表单系统搭建:SurveyKing / Formbricks,数据自己收
  3. 图床搭建:Lsky Pro / Lychee,自托管图片托管方案
  4. 邮件列表搭建:listmonk 自托管 Newsletter,把读者握在自己手里
  5. 文档站点搭建:MkDocs / VuePress / Docsify,产品文档与技术手册方案
  6. RSS 阅读器搭建:FreshRSS 自托管,把信息流拿回自己手里
  7. 短链接服务搭建:Shlink 自托管,链接数据自己掌握
  8. 网站状态监控页搭建:Uptime Kuma,服务器挂了第一时间知道
更多阅读
  1. 上一篇:Swap 分区与内存优化实战:小内存服务器的救命指南
  2. 下一篇:云服务器重装系统与数据保留完整流程
发表评论 2

取消回复