在日常运维中,服务器时间不准是个常见但容易被忽视的问题。比如某天日志显示用户下单时间比支付成功还晚,排查半天才发现是两台服务器时差了几分钟。这种问题靠人工校对根本不可行,得靠终端时间同步方法来解决。
NTP 是最常用的方案
绝大多数 Linux 终端都使用 NTP(Network Time Protocol)来保持时间一致。系统通过连接公共或内网的时间服务器,自动校准本地时间。常见的 ntpdate 命令可以一次性同步,但更适合用 ntpd 或 chronyd 这类守护进程长期运行,持续微调。
以 CentOS 8 为例,默认使用 chronyd。查看状态只需一条命令:
chronyc sources -v
输出里如果看到 ^* 开头的条目,说明已经连上主时间源了。如果全是 ^? 或者 ^x,那大概率网络不通或者配置有误。
自建内网时间服务器更稳定
公司内部有多台服务器时,建议选一台作为时间中心,其他终端都向它同步。这样既能减少对外网的依赖,也能避免因个别机器时间异常导致连锁问题。
比如在核心服务器上修改 /etc/chrony.conf,加入本地局域网段允许访问:
allow 192.168.1.0/24
然后重启服务生效:
systemctl restart chronyd
其他终端把 server 地址指向这台内网主机即可,响应更快也更安全。
防火墙别忘了放行 UDP 123 端口
经常遇到同步失败的情况,查来查去发现是防火墙拦了 NTP 通信。NTP 使用 UDP 协议的 123 端口,不管是进出方向都得放开。用 firewalld 的话,加个规则就行:
firewall-cmd --add-service=ntp --permanent
firewall-cmd --reload
Windows 终端也不能忽略
很多企业环境里还有 Windows Server 在跑。这类系统默认会自动同步 Internet 时间,但为了统一管理,最好手动指定内网时间源。打开“日期和时间”设置,切换到“Internet 时间”选项卡,点击“更改设置”,填入内网 NTP 服务器地址,比如 time.internal.corp,然后立即更新测试。
有些老旧系统可能禁用了 W32Time 服务,记得检查服务状态是否为“正在运行”。
虚拟机要注意宿主机干扰
跑在 VMware 或 KVM 上的虚拟终端,有时会出现时间跳变。这是因为宿主机资源紧张时,虚拟机时钟跟不上实际节奏。除了开启 NTP 同步外,还得确保安装了对应的增强工具,比如 VMware Tools 或 qemu-guest-agent,并启用时间同步功能。
例如在 libvirt 环境下,XML 配置里加上这一段才能让 guest 时间自动追平 host:
<clock offset='utc'>
<timer name='hypervclock' present='yes'/>
<timer name='hpet' present='no'/>
</clock>
时间不同步看起来小事一桩,真出问题能让你翻几天日志都找不到根因。与其事后救火,不如提前把终端时间同步方法配妥当,省下的不只是时间,更是半夜被报警叫醒的烦恼。