必须先执行timedatectl set-timezone asia/shanghai,因新装centos/ubuntu默认时区为etc/utc,导致时间显示慢8小时;不修正时区,后续ntp同步只会固化错误时间,且宝塔面板、日志、文件时间戳均受其影响。

系统时间不准不是宝塔的问题,而是 Linux 服务器默认没设时区、也没开 NTP 同步——必须手动补上这两步,否则日志时间错乱、SSL 续签失败、计划任务漏跑都是必然的。
timedatectl set-timezone Asia/Shanghai 为什么必须先执行
很多新装的 CentOS/Ubuntu 服务器默认时区是 Etc/UTC 或 Europe/London,date 命令输出的时间看着“慢 8 小时”,其实是它在 UTC 时区下显示的本地时间。宝塔面板右上角时间、journalctl 日志、ls -l 文件时间戳,全按这个时区渲染。不改时区,后面所有同步都只是“把错误的时间越校越准”。
-
timedatectl输出里看到Time zone: Etc/UTC (UTC, +0000)就得立刻改 - 执行
sudo timedatectl set-timezone Asia/Shanghai(注意大小写和斜杠,Asia/shanghai会失败) - 改完立刻执行
date,确认输出带CST或+0800 - 这步不依赖网络,也不需要重启,改完即生效
systemd-timesyncd 和 chronyd 到底该用哪个
取决于你的系统版本和云厂商环境:Ubuntu 20.04+/Debian 11+ 默认用 systemd-timesyncd;CentOS 8+/AlmaLinux/RHEL 8+ 默认用 chronyd。别混着用,也别强行安装另一个——冲突会导致 chronyc tracking 报 No such file or directory 或 timedatectl status 显示 NTP enabled: no。
- 先查当前服务:
timedatectl status | grep "NTP service",看是systemd-timesyncd还是chronyd - 如果是
systemd-timesyncd且状态为inactive,运行:sudo systemctl enable --now systemd-timesyncd - 如果是
chronyd且未运行,运行:sudo systemctl enable --now chronyd - 国内 VPS 常因防火墙拦截 UDP 123 端口导致同步失败,检查:
sudo firewall-cmd --list-ports | grep 123(CentOS)或sudo ufw status | grep 123(Ubuntu),没放行就加规则
/etc/systemd/timesyncd.conf 或 /etc/chrony.conf 必须换阿里云 NTP 源
默认的 pool.ntp.org 在国内延迟高、丢包率大,chronyc sources -v 或 timedatectl timesync-status 里常显示 ^X(failed)或 ^?(unresolved)。不用猜,直接换阿里云源最稳。
- 对
systemd-timesyncd:编辑/etc/systemd/timesyncd.conf,取消注释并改成:NTP=ntp1.aliyun.com ntp2.aliyun.com - 对
chronyd:编辑/etc/chrony.conf,注释掉所有server行,新加:server ntp1.aliyun.com iburst -
iburst参数不能省,否则首次同步可能卡住几十秒 - 改完必须重启服务:
sudo systemctl restart systemd-timesyncd或sudo systemctl restart chronyd - 验证是否连上:
chronyc tracking看Offset是否在 ±50ms 内;timedatectl timesync-status看Server:是否显示阿里云地址
hwclock -w 为什么不能跳过
虚拟机(尤其是阿里云轻量、腾讯云 CVM)断电或重启后,硬件时钟不会自动同步系统时间。哪怕 chronyd 正常运行,重启后系统时间仍会回退到 BIOS 里那个旧值——这就是为什么你明明校准好了,一重启又变 UTC 时间。
- 校准完成后,立刻执行:
sudo hwclock -w(写入硬件时钟) - chronyd 默认会自动做这事,但前提是配置里有
makestep或rtcsync,保险起见手动来一次 - 如果执行报错
Cannot access the Hardware Clock via any known method,说明当前用户没权限,加sudo再试 - 别信宝塔面板右上角时间——它缓存约 5 分钟,以
date -R输出为准
真正容易被忽略的是:PHP 和 MySQL 的时区设置不影响系统时间,但会影响日志里 date() 或 NOW() 的输出。如果你看到网站后台时间还是错的,得单独去宝塔 PHP 设置里填 date.timezone = Asia/Shanghai,再进 MySQL 执行 SET GLOBAL time_zone = '+8:00' —— 这两步和系统时间校准无关,但缺一不可。











