Linux服务器时间校准方法教程
查看当前时间和时区
校准时间前,先确认服务器当前时间和时区。
执行 date 命令能看到系统时间:
date
输出类似 Tue Mar 25 14:30:00 CST 2025,末尾的 CST 表示中国标准时间。
如果时区不对,用 timedatectl 查看完整信息:
timedatectl
重点关注 Time zone 和 System clock synchronized 两行。
如果时区不是 Asia/Shanghai,用以下命令设置:
timedatectl set-timezone Asia/Shanghai
设置后再次执行 timedatectl 确认变化。
这一步是后续Linux服务器时间校准方法的基础,时区错了校准也没意义。
用chrony自动同步时间
推荐使用 chrony 替代老旧的 ntpd,它更快、更准。
安装命令因发行版而异:
- CentOS/RHEL/Fedora:
yum install chrony -y - Ubuntu/Debian:
apt install chrony -y
安装后编辑配置文件 /etc/chrony.conf,建议添加国内的NTP服务器:
vim /etc/chrony.conf
在文件顶部添加或替换为以下服务器:
server ntp.aliyun.com iburst
server ntp.tencent.com iburst
server ntp1.aliyun.com iburst
保存后启动并设置开机自启:
systemctl start chronyd
systemctl enable chronyd
查看同步状态:
chronyc sources -v
输出中出现 ^* 开头的行表示已成功同步。
继续用 timedatectl 验证:
timedatectl
如果 System clock synchronized: yes 和 NTP service: active,说明自动同步生效。
这是最推荐的Linux服务器时间校准方法。
手动设置时间(应急用)
某些环境无法连接外网NTP,比如内网服务器。
可以直接手动设置:
date -s "2025-03-25 14:30:00"
这条命令只改系统时间,重启后会失效。
需要同时写入硬件时钟:
hwclock -w
执行 hwclock -r 确认硬件时间已同步。
手动设置后建议重启chrony(如果安装了)以避免下次启动被覆盖:
systemctl restart chronyd
注意:手动设置误差大,只适合临时修复。
长期使用仍应配置自动同步。
常见问题与避坑
Q1:防火墙阻止NTP同步
NTP使用UDP 123端口。如果服务器有防火墙,需放行:
firewall-cmd --add-service=ntp --permanent
firewall-cmd --reload
或使用iptables。
放行后重新启动chrony。
Q2:时区已设,但时间仍差8小时
检查硬件时钟是否为UTC。执行 timedatectl 查看 RTC in local TZ 是否为 no。如果 yes,会导致系统与硬件时间冲突。建议保持 no,让硬件时钟使用UTC:
timedatectl set-local-rtc 0
Q3:虚拟机时间漂移严重
VMware或KVM虚拟机建议安装open-vm-tools(VMware)或qemu-guest-agent(KVM),它们会同步宿主机时间。安装后重启虚拟机。
Q4:chronyc sources 显示 ^? 表示不可达
检查网络连通性,用 ping ntp.aliyun.com 测试。如果通,检查配置文件中的 server 行是否写对。
验证校准是否成功
校准完一定要验证。
运行以下命令一行行确认:
timedatectl
chronyc tracking
timedatectl 中关键字段:
Local time应与本地时间一致Universal time与UTC一致RTC time应与硬件时间一致Time zone正确System clock synchronized: yesNTP service: active
chronyc tracking 会显示 Last offset,理想情况接近0(如+/-0.01秒内)。
如果想直观对比,用 date 和手机或另一台已知准确时间的机器对比。
日常维护建议加入crontab定时校准(虽然chrony会自动处理,但加一个冗余更保险):
crontab -e
添加一行:
0 */6 * * * /usr/sbin/chronyc -a makestep
每6小时强制快同步一次。
这样你的Linux服务器时间校准方法就完整了,再也不用担心日志错乱或证书过期问题。