推荐使用 timedatectl set-timezone Asia/Shanghai 设置系统时区,它自动更新软链接、重解释时间并同步硬件时钟;手动设置需用 ln -sf 创建指向 /usr/share/zoneinfo/Asia/Shanghai 的软链接,并确保服务重启生效。

用 timedatectl set-timezone 设置(systemd 系统首选)
绝大多数现代 Linux 发行版(CentOS 7+、Ubuntu 16.04+、Debian 9+)都基于 systemd,timedatectl 是唯一推荐的系统级时区配置方式。它不只是改一个链接,而是完整协调时区、系统时间解释逻辑和硬件时钟同步。
- 先确认当前状态:
timedatectl status,重点看Time zone行是否为Asia/Shanghai - 查证时区名是否可用:
timedatectl list-timezones | grep -i shanghai,输出应只有Asia/Shanghai—— 不要用Asia/Beijing或PRC,它们在部分系统中已失效 - 执行设置:
sudo timedatectl set-timezone Asia/Shanghai,该命令会自动完成三件事:更新/etc/localtime软链接、重新解释系统时间(不改秒数)、调用hwclock --systohc同步 BIOS 时间 - 验证:
date输出末尾应含CST或+0800;timedatectl中Time zone行应显示Asia/Shanghai (CST, +0800)
手动创建 /etc/localtime 软链接(非 systemd 或容器调试场景)
某些精简系统(如 Alpine)、旧版 init 系统或 Docker 容器内可能没有 timedatectl,这时需手动操作,但必须严格按路径和符号链接方式来,否则服务(如 rsyslog、journalctl)可能缓存旧时区。
- 确保时区数据存在:
ls /usr/share/zoneinfo/Asia/Shanghai,若报错需先安装时区包:sudo apt install tzdata(Debian/Ubuntu)或sudo dnf install glibc-common(RHEL/CentOS) - 删除并重建软链接:
sudo rm -f /etc/localtime && sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime—— 必须用ln -sf,不能用cp,否则是普通文件,后续无法被 systemd 正确识别 - Debian/Ubuntu 系统还需写入
/etc/timezone:echo "Asia/Shanghai" | sudo tee /etc/timezone,再运行sudo dpkg-reconfigure -f noninteractive tzdata - 注意:此方法不会自动同步硬件时钟,重启后可能回退,必要时补上:
sudo hwclock --systohc
TZ 环境变量只影响当前进程(别误当系统设置)
TZ=Asia/Shanghai 是 shell 级临时方案,对单个命令或当前终端会话有效,但不改变系统全局时区。它常用于调试、CI 脚本或容器启动参数,但绝不能替代 timedatectl 或软链接设置。
- 临时生效:
export TZ="Asia/Shanghai",然后date查看效果 - 仅对当前 shell 及其子进程有效,新开终端或服务进程(如 cron job)不受影响
- Docker 运行时可传参:
docker run -e TZ=Asia/Shanghai ...;Dockerfile 中写ENV TZ=Asia/Shanghai - Java 应用可能忽略系统时区,需额外加 JVM 参数:
-Duser.timezone=Asia/Shanghai
验证和常见失效点
设置后看似 date 显示正确,不代表真正生效。很多问题出在验证方式错误或服务未重载。
-
date -R输出末尾必须是+0800,不是+0000或其他偏移 -
ls -l /etc/localtime必须显示指向/usr/share/zoneinfo/Asia/Shanghai的软链接,而不是普通文件或指向错误路径 - 修改后,
rsyslog、auditd、cron等服务通常需要重启才能应用新时区,否则日志时间仍为旧时区 - 虚拟机或云主机若启用了 NTP,建议同时开启时间同步:
sudo timedatectl set-ntp true,否则时区虽对,时间本身可能漂移
timedatectl 优先)、确认软链接真实指向、验证服务级行为而非仅看 date 输出。尤其在生产环境,跳过硬件时钟同步或误用 cp 替代 ln -sf,往往导致重启后时间错乱,且排查困难。


















