Ubuntu 设置北京时间并使用 chrony 校准系统时间

在 Ubuntu 服务器上将时区设置为 Asia/Shanghai,并使用 chrony 同步准确时间,避免时间漂移导致证书校验、软件源更新和服务运行异常。

这篇只保留实测可用、日常维护里也最有价值的做法:先把 Ubuntu 服务器时区设置为北京时间,也就是 Asia/Shanghai,再用 chrony 把系统时间同步准确。系统时间不准时,HTTPS 下载、证书校验、包管理器更新和一些依赖时间戳的服务都可能出现奇怪问题,所以建议新机器先把时间处理好。

时间同步和北京时间的关系

这里要分清两件事:

  • Asia/Shanghai 负责把系统显示时区设为北京时间,也就是 UTC+8。
  • chrony 负责通过 NTP 校准系统时钟,让时间本身准确。

所以只安装 chrony 不等于设置北京时间;只设置 Asia/Shanghai 也不等于时间已经校准。两个都做完,date 看到的时间才会是准确的北京时间。

一、设置时区为北京时间

先查看当前时间和时区:

timedatectl
date

设置系统时区为北京时间:

sudo timedatectl set-timezone Asia/Shanghai

再次确认:

timedatectl
date

timedatectl 输出里应能看到:

Time zone: Asia/Shanghai (CST, +0800)

date 输出里也应该出现 CST+0800。这一步只负责时区显示,不负责从网络校准时间。

二、使用 chrony 校准系统时间

Ubuntu 默认可以使用 systemd-timesyncd 做基础时间同步,但服务器环境更推荐使用 chrony。它在虚拟机暂停、网络不稳定或时间偏移较大的场景下恢复同步通常更快。

先安装 chrony

sudo apt update
sudo apt install -y chrony

编辑配置文件:

sudo nvim /etc/chrony/chrony.conf

清空或覆盖 /etc/chrony/chrony.conf,写入以下完整配置:

# 定义上游 NTP 服务器池,iburst 用于加速初始同步
pool ntp.ubuntu.com        iburst maxsources 4
pool 0.ubuntu.pool.ntp.org iburst maxsources 1
pool 1.ubuntu.pool.ntp.org iburst maxsources 1
pool 2.ubuntu.pool.ntp.org iburst maxsources 2

# 记录系统时钟漂移速率
driftfile /var/lib/chrony/chrony.drift

# 系统刚启动时,如果前 3 次更新时间误差大于 1 秒,则允许直接校正
makestep 1 3

# 启用内核同步硬件时钟
rtcsync

重启并设置开机启动:

sudo systemctl restart chrony
sudo systemctl enable chrony

查看当前 NTP 源状态:

chronyc sources -v

输出里带 ^* 的那一行表示当前正在使用的主要同步源。继续查看系统时钟同步详情:

chronyc tracking

最后确认系统时间和同步状态:

timedatectl
date

重点看这几项:

Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
NTP service: active

如果 date 显示的是北京时间,且 timedatectl 里同步状态正常,就说明时区和时间同步都已经处理好了。