这篇只保留实测可用、日常维护里也最有价值的做法:先把 Ubuntu 服务器时区设置为北京时间,也就是 Asia/Shanghai,再用 chrony 把系统时间同步准确。系统时间不准时,HTTPS 下载、证书校验、包管理器更新和一些依赖时间戳的服务都可能出现奇怪问题,所以建议新机器先把时间处理好。
时间同步和北京时间的关系
这里要分清两件事:
Asia/Shanghai负责把系统显示时区设为北京时间,也就是 UTC+8。chrony负责通过 NTP 校准系统时钟,让时间本身准确。
所以只安装 chrony 不等于设置北京时间;只设置 Asia/Shanghai 也不等于时间已经校准。两个都做完,date 看到的时间才会是准确的北京时间。
一、设置时区为北京时间
先查看当前时间和时区:
timedatectl
date设置系统时区为北京时间:
sudo timedatectl set-timezone Asia/Shanghai再次确认:
timedatectl
datetimedatectl 输出里应能看到:
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 里同步状态正常,就说明时区和时间同步都已经处理好了。