Chrony 使用指南:Linux 时间同步最佳实践
Chrony 是一款开源的网络时间协议 (NTP) 实现,专为 Linux 系统设计。相比于传统的 ntpd,Chrony 在处理不稳定的网络环境、间歇性网络连接以及虚拟机环境时表现更为出色。
Chrony vs ntpd
| 特性 | Chrony | ntpd |
|---|---|---|
| 网络中断恢复 | 快速同步 | 同步较慢 |
| 虚拟机支持 | 优秀 | 一般 |
| 时钟频率调整 | 动态调整 | 固定调整 |
| 配置复杂度 | 简单 | 较复杂 |
| 内存占用 | 较低 | 较高 |
安装 Chrony
Debian/Ubuntu
1sudo apt update
2sudo apt install chrony
RHEL/CentOS/Rocky/AlmaLinux
1sudo dnf install chrony
Arch Linux
1sudo pacman -S chrony
配置文件详解
Chrony 的主配置文件位于 /etc/chrony.conf:
1# /etc/chrony.conf
2
3# 使用 NTP 服务器池
4pool pool.ntp.org iburst
5
6# 允许特定网段同步时间
7allow 192.168.1.0/24
8
9# 启用实时调度(提高精度)
10rtc device /dev/rtc
11
12# 设置最大同步偏移量(秒)
13makestep 1.0 3
14
15# 启用 drift 文件记录时钟漂移
16driftfile /var/lib/chrony/drift
17
18# 日志目录
19logdir /var/log/chrony
关键配置说明
| 参数 | 说明 |
|---|---|
server | 指定单个 NTP 服务器 |
pool | 指定 NTP 服务器池,自动选择多个服务器 |
iburst | 启动时快速发送数据包加速同步 |
allow | 允许哪些客户端同步时间 |
makestep | 当时间偏差超过阈值时立即调整 |
driftfile | 记录系统时钟的漂移特性 |
常用命令
检查同步状态
1chronyc sources
输出示例:
1MS Name/IP address Stratum Poll Reach LastRx Last sample
2===============================================================================
3^* time1.google.com 1 6 377 25 +123us[+234us] +/- 11ms
4^- time2.google.com 1 6 377 26 -456us[-345us] +/- 12ms
5^+ time3.google.com 1 6 377 27 +789us[+890us] +/- 13ms
状态标识含义:
^*- 当前同步源^+- 可接受同步源^-- 不可接受同步源^?- 连接失败
查看源统计信息
1chronyc sourcestats
追踪同步过程
1chronyc tracking
输出示例:
1Reference ID : C0A80101 (192.168.1.1)
2Stratum : 2
3Ref time (UTC) : Mon Dec 30 06:45:28 2025
4System time : 0.000001500 seconds fast of NTP time
5Last offset : +0.000012345 seconds
6RMS offset : 0.000023456 seconds
7Frequency : 15.123 ppm fast
8Residual freq : +0.000 ppm
9Skew : 0.012 ppm
10Root delay : 0.012345678 seconds
11Root dispersion : 0.001234567 seconds
12Update interval : 64.2 seconds
13Leap status : Normal
手动同步时间
1chronyc makestep
服务管理
启动并设置开机自启
1sudo systemctl enable --now chronyd
检查服务状态
1sudo systemctl status chronyd
重启服务
1sudo systemctl restart chronyd
配置为 NTP 服务器
如果你想让局域网内的其他机器同步你的服务器时间:
1# /etc/chrony.conf
2
3# 上游 NTP 服务器
4pool pool.ntp.org iburst
5
6# 允许局域网客户端
7allow 192.168.0.0/16
8
9# 监听所有接口
10bindaddress 0.0.0.0
记得在防火墙中开放 UDP 123 端口:
1# firewalld
2sudo firewall-cmd --permanent --add-service=ntp
3sudo firewall-cmd --reload
4
5# ufw
6sudo ufw allow ntp
虚拟机优化配置
对于虚拟机环境,建议添加以下配置:
1# /etc/chrony.conf
2
3# 允许较大的时间偏移
4makestep 1.0 -1
5
6# 禁用实时时钟
7rtcsync off
8
9# 更频繁的轮询
10maxupdateskew 100.0
常见问题排查
时间无法同步
- 检查网络连接:
1chronyc activity
- 检查防火墙规则:
1sudo iptables -L -n | grep 123
- 验证 NTP 服务器可达性:
1ntpdate -q pool.ntp.org
时钟漂移过大
查看漂移文件:
1cat /var/lib/chrony/drift
如果漂移值异常(>500ppm),可能是硬件时钟问题。
SELinux 阻止 chronyd
1# 检查 SELinux 状态
2getenforce
3
4# 如果是 Enforcing,可以临时设置为 Permissive 测试
5sudo setenforce 0
与 systemd-timesyncd 的选择
| 场景 | 推荐方案 |
|---|---|
| 桌面系统 | systemd-timesyncd |
| 服务器/需要高精度 | chrony |
| 虚拟机 | chrony |
| 网络不稳定环境 | chrony |
禁用 systemd-timesyncd 并使用 chrony:
1sudo timedatectl set-ntp false
2sudo systemctl enable --now chronyd
总结
Chrony 是现代 Linux 系统时间同步的首选方案,特别适合服务器和虚拟机环境。通过合理配置 makestep、driftfile 和服务器池,可以实现高精度、高可靠性的时间同步服务。
对于生产环境,建议:
- 使用本地 NTP 服务器池减轻公共服务器负载
- 配置防火墙保护 NTP 服务
- 定期检查同步日志
- 监控时间偏移和漂移值