Chrony 使用指南:Linux 时间同步最佳实践

Chrony 是一款开源的网络时间协议 (NTP) 实现,专为 Linux 系统设计。相比于传统的 ntpd,Chrony 在处理不稳定的网络环境、间歇性网络连接以及虚拟机环境时表现更为出色。

Chrony vs ntpd

特性Chronyntpd
网络中断恢复快速同步同步较慢
虚拟机支持优秀一般
时钟频率调整动态调整固定调整
配置复杂度简单较复杂
内存占用较低较高

安装 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

常见问题排查

时间无法同步

  1. 检查网络连接:
1chronyc activity
  1. 检查防火墙规则:
1sudo iptables -L -n | grep 123
  1. 验证 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 系统时间同步的首选方案,特别适合服务器和虚拟机环境。通过合理配置 makestepdriftfile 和服务器池,可以实现高精度、高可靠性的时间同步服务。

对于生产环境,建议:

  1. 使用本地 NTP 服务器池减轻公共服务器负载
  2. 配置防火墙保护 NTP 服务
  3. 定期检查同步日志
  4. 监控时间偏移和漂移值