登录服务器敲 date,返回时间比北京时间慢 8 小时,日志和定时任务全跟着错位。先看时区,再决定是改时间还是配同步,别上来就重启。

临时改系统时间用 date -s,例如 date -s '2026-10-28 10:30:00',引号用单引号就行。改完执行 hwclock -w 把时间写回硬件时钟,否则重启又回到老样子。CentOS 7 之后更推荐 timedatectl set-time 10:30:00,它和 date 改的是同一个系统时钟,只是多了状态提示。

时区不对,先改 /etc/localtime

timedatectl 输出里 Time zone 显示 UTC,就是差 8 小时的根源。执行 timedatectl set-timezone Asia/Shanghai 即可;没有 timedatectl 的老系统,把 /etc/localtime 软链到 /usr/share/zoneinfo/Asia/Shanghai,Red Hat 系再改 /etc/sysconfig/clock 里的 ZONE 值。容器一般跟随宿主机时间,改容器本身意义不大。

自动同步交给 chronyd

手动改完过几天又漂,说明该配 NTP 了。CentOS 7 默认装 chronyd,配置文件在 /etc/chrony.conf,加一行 server 指向内网时间源或公共 NTP 地址,systemctl restart chronyd 后用 chronyc sources 看前面有没有星号。Ubuntu 多用 systemd-timesyncd 或 ntpd,命令不通用,别照抄。

三个容易忽略的点

  • timedatectl set-time 要求先关掉 NTP,否则会提示自动同步已开启。
  • date -s 只改运行中的系统,hwclock -w 才写进主板电池。
  • Windows 和 Linux 双系统差 8 小时,是硬件时钟按本地时间还是 UTC 解释的问题,可以统一成一种约定。

Linux 设置时间其实就三步:date 看时间,timedatectl 看时区,chronyc sources 看同步状态。生产机配好 NTP 就别再手改,日志时间对不上时,先怀疑时区,再怀疑硬件时钟没电。