Linux时间同步chrony:Linux服务器chrony

为什么需要chrony?
Linux服务器如果时间不准,会直接导致日志错乱、证书验证失败、数据库事务异常等问题。chrony 是新一代时间同步服务,比传统ntpd更精准、启动更快、在网络抖动时表现更好。
目前主流的 CentOS 8+、Ubuntu 20.04+ 以及 Debian 10+ 都默认推荐 chrony。
本文全程以 CentOS 7/8 和 Ubuntu 22.04 为例,零基础也能照着做。
第一步:安装并启动chrony
1.1 安装命令
- CentOS / RHEL:
yum install chrony -y(CentOS 7)或dnf install chrony -y(CentOS 8+) - Ubuntu / Debian:
apt install chrony -y
安装完成后检查状态:
systemctl status chronyd如果未启动,执行 systemctl start chronyd 并设置开机自启:
systemctl enable chronyd1.2 配置文件位置
主配置文件:/etc/chrony.conf(部分旧版本是 /etc/chrony/chrony.conf)。
修改前建议备份:cp /etc/chrony.conf /etc/chrony.conf.bak
第二步:配置时间源(NTP服务器)
2.1 默认配置说明
打开配置文件,你可能会看到类似这样的行:
pool 2.centos.pool.ntp.org iburstpool 代表从一组服务器自动选择;iburst 表示启动时快速发送多个请求以加速同步。
2.2 修改为国内常用NTP服务器
对于大陆用户,推荐使用阿里云或腾讯云的NTP服务器,网速快且稳定。
将配置中的 pool 或 server 行替换为:
server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst也可以添加多个以作冗余。
如果是内部网络,可以指向自己的NTP服务器。
2.3 允许客户端同步(服务端配置)
如果你想让这个服务器作为内网的NTP源,需要在配置中添加允许客户端的网段:
allow 192.168.1.0/24默认 chrony 只监听本地,如果要对外同步,还需确认防火墙已放行UDP 123端口(见避坑部分)。
第三步:重启服务并验证时间同步状态
3.1 应用配置
保存配置文件后重启 chronyd:
systemctl restart chronyd3.2 查看同步状态
使用 chronyc 命令检查:
chronyc sources -v输出中 ^* 表示当前正在同步的服务器(星号标记为最优源),如果看到 ^? 表示同步失败。
更详细的跟踪信息:
chronyc tracking重点关注 Last offset(上次偏差)和 Leap status(应显示 Normal)。
3.3 手动强制同步(可选)
chronyc -a makestep注意:如果时间偏差过大(超过配置的阈值),makestep 会立即调整时间,适合初始同步。
第四步:高频问题与避坑指南
4.1 防火墙未放行UDP 123端口
- 防火墙拦截:chrony使用UDP 123端口。检查是否放行:
firewall-cmd --list-ports添加规则:
firewall-cmd --add-port=123/udp --permanent
firewall-cmd --reload如果是宝塔面板,在“安全”页面添加放行端口 123(UDP)。
4.2 SELinux导致无法连接
SELinux 可能阻止 chrony 访问网络时间源。
临时关闭(不推荐生产):setenforce 0,永久关闭需修改 /etc/selinux/config。
建议保留 SELinux 启用,设置 chrony 域为 chronyd_t 并放行:
setsebool -P chronyd_connect_any on4.3 时区设置错误
时间同步只保证UTC时间正确,但系统显示的时间可能因为时区不对而“看着不对”。
检查时区:
timedatectl list-timezones | grep Shanghai
timedatectl set-timezone Asia/Shanghai4.4 chrony客户端无法同步服务端
- 客户端配置:同前文,将 server 指向服务端IP,如
server 192.168.1.10 iburst。 - 确保服务端的
allow行包含客户端网段。 - 检查双方防火墙是否放行UDP 123。
- 使用
chronyc sources -v查看客户端是否能收到响应。
第五步:效果验证与日常检查
时间同步稳定后,建议定期执行以下检查:
chronyc tracking | grep -E "(Ref time|Stratum|Last offset)"理想情况下 Last offset 应在 ±0.01 秒以内。
如果想看更详细的历史:
chronyc sourcestats -v最后,确认系统时间已同步:
date与标准时间(例如手机或阿里云NTP项目)对比即可。
如果你正在配置 Linux时间同步chrony,建议先按本文步骤完整执行,再根据自己的网络环境微调服务器列表;
遇到异常时优先检查防火墙、SELinux 和 allow 配置。
熟练之后,之后还可以将 chrony 配置纳入自动化运维工具(如 Ansible)中统一管理。