CentOS 修改系统时间与时区

服务器时间一旦不准,最先遭殃的是日志:排查问题时,日志里的时间戳和真实事件对不上,等于证据被污染。接着是定时任务,cron 是按时间触发的,差几分钟就可能错过备份窗口。还有 HTTPS 证书校验——证书有效期和“当前时间”对不上,客户端直接报证书无效。所以“对时”看起来是小事,实则是服务器基础运维里必须做对的一环。更隐蔽的是监控告警:指标采集带上错误时间,趋势图和告警判定全都会错位,排查成本翻倍。下面按“一次同步、长期正确”的思路,介绍手动同步和自动同步两条路线。另外提醒一句:动手改时间前,先确认没有正在运行的关键任务,并给日志做一下备份,避免事后对账时找不到原始时间点。

一、一键更新时间(推荐)

最省事的方式是一条命令完成“安装工具 → 同步时间 → 写入硬件时钟”:

yum install ntpdate -y && ntpdate cn.pool.ntp.org && clock -w

逐段拆开看:

  • yum install ntpdate -y:安装 ntpdate 时间同步工具;
  • ntpdate cn.pool.ntp.org:从中国 NTP 服务器池同步系统时间,同步是“对表”而非“拨表”,不会瞬间跳变导致日志出现大断层;
  • clock -w:把系统时间写入硬件时钟(CMOS)。这一步经常被漏掉,漏掉的后果是:重启后系统又从硬件时钟读回旧时间,等于白同步。

理解反向操作 hwclock -s 有助于看清原理:开机时系统默认从硬件时钟读时间,所以硬件时钟准不准,决定了重启后系统时间准不准。举例来说,一台跑了半年的服务器,晶体振荡器漂移累计可能达到几十秒到几分钟。只做 ntpdate 不写硬件时钟,这次对完表,下次重启又回到旧时间,等于问题永远存在。所以“同步后立刻 clock -w”要养成肌肉记忆。

二、修改时区

把上海时区写入当前时区配置:

cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

如果提示是否覆盖,输入 y 回车即可。这条命令的原理是:/etc/localtime 是指向时区文件的软链接或直接拷贝的时区文件,替换它等于告诉系统“现在按上海时间算”。

然后用 date 验证:

date

此时时区应显示为 CST(中国标准时区),例如:

Tue Apr  4 10:30:00 CST 2023

如果显示的是 UTC 或别的缩写,说明 /etc/localtime 没有替换成功,检查一下文件权限和路径。另外可以顺手执行 date -u 对比 UTC 与本地时间的差值,正常情况下应正好相差 8 小时(东八区)。如果差值是 0,说明时区设置根本没生效。

三、CentOS 7+ 更推荐 timedatectl

从 CentOS 7 开始,系统集成了 timedatectl,管理时间和时区更直观,也能避免手工改文件的低级错误:

# 查看当前时间和时区
timedatectl

# 设置时区为上海
timedatectl set-timezone Asia/Shanghai

# 开启 NTP 自动时间同步
timedatectl set-ntp true

timedatectl set-ntp true 会启用 systemd-timesyncd 或 chronyd 做后台自动同步,之后基本不用再手动对时。CentOS 8/9 里 ntpdate 已经不在默认仓库,直接用 timedatectlchrony 是更省心的选择。用 timedatectl 还有一个好处:timedatectl list-timezones 可以列出全部时区名,timedatectl status 一眼看清当前时间、时区、NTP 是否启用,比翻配置文件直观得多。新装的服务器,建议开机第一件事就是 timedatectl set-ntp true

四、Chrony:长期保持准确的现代方案

如果服务器要长期保持较高精度(比如涉及计费、日志审计),建议安装 chrony:

yum install chrony -y
systemctl enable --now chronyd
# 查看同步状态
chronyc sources -v

chrony 比 ntpdate 强在:它不是“隔一段时间对一次表”,而是持续跟踪时钟漂移,配合硬件时钟保持长期稳定;对网络抖动也更能容忍,离线一段时间后能快速重新收敛。需要精确时间的场景(数据库主从、日志审计、分布式锁)几乎都应该用 chrony。配置也简单:主配置文件 /etc/chrony.conf 里指定 server 或 pool,systemctl enable --now chronyd 后无需人工干预。验证同步状态用 chronyc tracking,能看到系统时间与参考源之间的偏差。

常见问题

  1. 改了时区但日志时间没变:重启 cron、nginx 等服务,让它们重新读取本地时区;
  2. ntpdate 提示已弃用/找不到命令:CentOS 8/9 默认仓库已移除,改用 timedatectl set-ntp true 或 chrony;
  3. 海外服务器对不上国内时间:把 cn.pool.ntp.org 换成 pool.ntp.org,或使用离机房更近的地区 NTP 服务器,减少网络延迟带来的误差。
  4. 断电重启时间跳回 1970:老旧物理机的 CMOS 电池没电后,每次断电重启时间都会重置,除了换电池,还要在系统层保证开机后第一时间做 NTP 同步。

系统时间管理是服务器基础运维的一部分,更多服务器配置与运维技巧可以参考云服务器分类下的服务器运维技巧Linux 服务器运维基础

参考:NTP 官方文档 https://www.ntp.org/documentation/、chrony 官方文档 https://chrony-project.org/documentation.html
原文链接:https://www.cnblogs.com/cqzhuomi/articles/17283254.html(博客园 CQZHUOMI,转载)