先说个真实经历。前几年有回帮朋友查服务器故障,日志里凌晨两点有条报错,可他坚持说自己是中午才动的那台机器。俩人对峙了半天,最后才发现是服务器时间慢了六个小时,日志时间跟实际时间根本对不上。你说这种坑气不气人,排查方向全被带偏了。从那以后我养成的习惯就是:看日志之前,先date看一眼服务器时间准不准。

时间不准到底能坑你多少事儿
别觉得时间差几分钟无所谓。日志时间错乱,排障的时候对不上号,这是最轻的;HTTPS证书校验依赖系统时间,时间差大了,浏览器直接给你报证书无效,网站都打不开;还有crontab定时任务,时间不对,该跑的任务不跑,不该跑的乱跑,数据库主从同步也会跟着出幺蛾子。所以时间同步这活儿,看着不起眼,其实是个基础中的基础。
先看看现在到底差多少
动手之前先摸个底。date看当前时间,timedatectl能看时区、同步状态这些信息。如果时间差得已经比较多了,光靠自动同步可能要磨蹭很久才能拉回来,最好先手动校一下,再让服务慢慢维持精度。
chrony,现在的默认答案
新一点的系统,CentOS 8往上、还有各种新版Debian/Ubuntu,默认的时间同步工具都是chrony,比老掉牙的ntpd同步快,精度还高。装它也就一条命令的事儿,CentOS系是yum install -y chrony,Debian系是apt install -y chrony,装完systemctl enable –now chronyd(Debian上服务名是chrony,别搞混)。
默认配置其实就能用,它会连官方的时间服务器。你要是觉得同步不稳,可以把配置文件/etc/chrony.conf里那行pool换成国内的服务器,比如pool ntp.aliyun.com iburst,国内访问快很多。改完重启服务,再用chronyc sources -v看一眼,输出里带^*标记的那行,就是已经同步上了,稳了。
时间差太多,先手动掰正
服务器时间要是差了半小时以上,等自动同步慢慢追太煎熬,直接手动校。新系统用chronyc makestep一下就跳过去了;老系统还得靠ntpdate -u ntp.aliyun.com这种老办法。校完别忘了把时间写进硬件时钟:hwclock -w,不然一重启,时间又退回老样子,白忙活。
同步老失败?多半是这仨原因
第一,防火墙把UDP 123端口拦了,NTP走的就是这个端口,安全组和系统防火墙都检查下。第二,云服务器的话,厂商一般都有内网NTP地址,用内网地址同步又稳又不走公网流量,比啥都强。第三,要是公司内网没外网,那就自己搭一台内网NTP服务器,让其他机器跟它同步。就这三板斧,基本能解决九成的同步失败。
动手之前,先把时区摆正
这一步特别容易被跳过,但它其实比同步本身还基础。你date一看时间跟北京时间差了8小时整,那不是时间不准,是时区压根没设对,服务器还在用UTC呢。时区不对,你同步得再准也没用,定时任务全给你按UTC跑。矫正很简单:timedatectl set-timezone Asia/Shanghai,改完再date看一眼,时间对上了再谈同步。这个坑我帮人排查的时候撞见过好几回,对方还坚持说自己服务器没问题,结果就是时区俩字母的事儿。
另外,要是你跑在虚拟化环境里,偶尔会发现时间一跳一跳的,这是宿主机负载高或者虚拟机迁移造成的,属于常见现象。真遇到这种,确认chrony在跑,一般过一阵它自己就慢慢追回来了,不用太紧张。
配完就完事儿了吗?还得验证一下
配完记得再确认一遍:chronyc tracking里看System time那一项,正常应该在很小的数值范围内波动,说明系统时间跟标准时间咬得很紧。这套配下来,服务器时间就能长期保持准头,以后看日志、跑定时任务、续证书,都省心。行了,趁现在去把时间同步配了吧,别再让日志坑你第二次了。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!