时间不同步是个隐蔽杀手:日志时间错乱排查问题全对不上、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三个重点看:
- Time zone 是不是
Asia/Shanghai(国内服务器默认应该 CST +0800) - System clock synchronized 是不是
yes - 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/timezoneDocker 容器内时区不随宿主机,要单独设:
# 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 statusCentOS 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 就是干这个的:偏差大时直接跳变,而不是慢慢调)。
云服务器
主流云厂商虚拟机默认时间同步正常,但有两个注意点:
- 不建议在云服务器上装 KVM 虚拟化后再跑 NTP 客户端——嵌套虚拟化时 NTP 可能和宿主冲突,用厂商的时钟源即可
- 部分云平台禁止修改硬件时钟,
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 机型省一半以上。
延伸阅读
- 网站环境怎么选:LNMP 手动 / 宝塔面板 / Docker / 云开发
- 问卷表单系统搭建:SurveyKing / Formbricks,数据自己收
- 图床搭建:Lsky Pro / Lychee,自托管图片托管方案
- 邮件列表搭建:listmonk 自托管 Newsletter,把读者握在自己手里
- 文档站点搭建:MkDocs / VuePress / Docsify,产品文档与技术手册方案
- RSS 阅读器搭建:FreshRSS 自托管,把信息流拿回自己手里
- 短链接服务搭建:Shlink 自托管,链接数据自己掌握
- 网站状态监控页搭建:Uptime Kuma,服务器挂了第一时间知道

[...]journalctl -k | grep -i "killed process"更复杂的分析(Web 日志安全分析)见Web 日志分析实战。七、常见问题Q:journalctl 输出是二进制乱码?用 journalctl 看,不要 cat /var/log/journal/xxx.journal。想转文本:journalctl -o export > backup.jou[...]
2026-10-13 回复
[...]netsh advfirewall firewall add rule name="GameRange" dir=in action=allow protocol=UDP localport=26901-26903完整的 Windows 环境准备(远程桌面连接、运行库安装、SteamCMD 用法、开机自启、8 个常见坑)见:《Windows 云服务器开服通用前置教程》→ htt[...]
2026-10-18 回复