Linux服务器时间同步chrony:从安装到验证完整教程
为什么选择chrony做Linux服务器时间同步
很多老运维都用过NTP服务,但chrony在动态网络(如虚拟机迁移、网络抖动环境)下表现更稳定。
它会持续跟踪时间漂移,即使网络偶尔断开也能保持相对准确。
这篇文章我会从安装、配置到验证,带你一步步在Linux服务器上启用chrony,确保系统时间与标准NTP服务器保持一致。
安装chrony并完成基本配置
大多数主流Linux发行版都可以直接从官方源安装chrony。
以CentOS 7/8、Ubuntu 20.04/22.04和Debian为例:
# CentOS / RHEL
yum install -y chrony
# Ubuntu / Debian
apt install -y chrony
安装完成后,主配置文件位于 /etc/chrony.conf(部分系统是 /etc/chrony/chrony.conf)。
打开它,你会看到默认的NTP服务器列表。
我们可以将其替换成国内更快的服务器,例如:
pool ntp.aliyun.com iburst
pool cn.pool.ntp.org iburst
iburst 参数表示初始同步时快速发送几次请求,加快首次同步速度。
如果你需要使用内部NTP服务器,也按这个格式添加。
此外,建议保留一行本地时钟作为备份:
local stratum 10
这样即使所有外部NTP都不可达,服务器也不会把时间改回1970年。
启动chrony服务并设置为开机自启
配置改好后,重启chronyd服务并启用开机自启:
systemctl restart chronyd
systemctl enable chronyd
查看当前服务状态,确认没有报错:
systemctl status chronyd
输出中应该显示 active (running),并且没有 FAILED 字样。
如果防火墙启用,记得放行UDP 123端口(NTP协议端口):
# firewalld
firewall-cmd --add-service=ntp --permanent
firewall-cmd --reload
# iptables
iptables -A INPUT -p udp --dport 123 -j ACCEPT
验证时间同步是否生效
同步不会立即完成,等一两分钟后使用 chronyc 工具查看状态:
chronyc sources -v
输出中的 ^* 或 ^+ 表示已与源成功同步(^*是当前主源,^+是备用)。
如果全是 ^? 说明未同步,检查网络和配置。
更直观的方法是直接对比当前系统时间和NTP标准时间:
chronyc tracking
主要看 Last offset 和 RMS offset,如果数值在几毫秒以内说明同步正常。
你也可以用 date 命令自己对比,不过最准确还是看chrony自身的统计。
避坑指南与高频问题
问题1:chrony启动后系统时间反而跳变
首次安装并发起同步时,chrony会逐步调整时间,不会一次性硬跳(除非系统时间差得离谱)。
如果你不希望有跳变,可以在配置文件中增加 makestep 1 -1 并注释掉默认的 makestep 1 3,这样除非手动干预,chrony不会做大幅度快进或后退。
问题2:虚拟机恢复后时间还是旧值
虚拟化环境暂停恢复后,chrony会检测到时间偏差并主动追赶。
如果偏差过大,可能触发makestep导致日志重复。
建议在配置中加入 rtcsync,让chrony定期将系统时间写入硬件时钟(RTC),减少重启或恢复后的偏差。
问题3:如何临时禁用chrony改用ntpd
先停用chrony:systemctl stop chronyd && systemctl disable chronyd,然后装ntp并启动即可。
不过建议尽量只用一种同步服务。
问题4:查看同步历史和统计
使用 chronyc sourcestats -v 可以看每个源的延迟和抖动等统计数据,用于判断源质量。
如果你在配置过程中遇到任何报错,先检查 /var/log/chrony 下的日志文件,或者用 journalctl -u chronyd 查看详细输出。
总结
通过以上步骤,你已经完成了Linux服务器上chrony的安装、配置、启动和验证。
chrony作为现代时间同步方案,在容器、云主机和混合网络下都有明显优势。
建议上线后持续观察一两天,确保同步稳定。
如果后续遇到特殊需求(如手动强制同步、配置多个层级),可以参考chrony官方文档进一步优化。