Linux时间校准——Chrony
一、概述
Chrony
是一款开源的网络时间协议(NTP)客户端和服务端软件,旨在提供高精度的时间同步功能。相较于传统的 NTP
实现如 ntpd
,Chrony
提供了一些改进和优势,包括更快的同步速度、低延迟、低CPU占用和低内存消耗。以下是 Chrony
的几个关键特性和使用场景:
组成
chronyd
:这是一个后台守护进程,负责与时间服务器通信,根据网络条件和系统时钟特性动态调整内核中的系统时钟,以最小化时间和频率误差。它能够智能地应对网络延迟、间歇性连接、时钟漂移以及虚拟环境中的不稳定性。chronyc
:这是一个命令行工具,为用户提供了一个界面来监控Chrony
的性能、查看同步状态、调整配置参数以及手动执行某些操作,如立即同步或查看时间源的状态。
特点:
- 快速同步:
Chrony
使用特殊算法能快速减少系统时钟的偏移和频率误差,非常适合那些非24小时运行的系统,如虚拟机。 - 频率调整:能够更有效地应对时钟频率的快速变化,适合于拥有不稳定时钟的虚拟环境或受节能技术影响的系统。
- 节能技术兼容性:即使在节能技术导致CPU频率变化的系统中也能保持良好的时间同步。
- 灵活配置:支持多种同步源,包括
NTP
服务器、GPS
接收器或其他参考时钟,以及手动时间输入。
使用场景:
- 企业服务器:确保数据中心内的所有服务器保持时间同步,这对于日志记录、交易时间戳、数据一致性等至关重要。
- 桌面系统:提高个人电脑的时间精度,尤其是对于依赖精确时间的应用,如开发环境、金融交易软件或科学计算。
- 嵌入式系统和物联网设备:在资源有限的设备上,
Chrony
的低资源消耗特性使其成为理想的选择。 - 虚拟环境:在云服务器或虚拟机中,
Chrony
能有效应对由于虚拟化带来的时钟漂移问题。 - 高精度应用:科研机构、天文观测、卫星通信等领域,需要高度精确时间同步的应用场景。
二、安装
1 |
|
systemctl status chronyd
1 |
|
chronyc sources -v
1 |
|
以上为以公网ntp为例
三、相关指令
(1)选项说明
选项 | 描述 |
---|---|
-4 | 仅解析 IPv4 地址并创建 IPv4 套接字。 |
-6 | 仅解析 IPv6 地址并创建 IPv6 套接字。 |
-f file |
指定配置文件路径(默认为 /etc/chrony.conf )。 |
-n | 不分离终端,保持在前台运行。 |
-d | 不分离终端,将日志输出到终端而非 syslog 。若编译支持调试,则重复使用 -d 可显示调试信息。 |
-l file |
将日志输出到指定文件而非 syslog 或终端。 |
-q | 快速同步时间后退出(需 root 权限)。 |
-Q | 仅显示时间偏移,不调整时间(无需 root 权限)。 |
-r | 重新加载并删除服务器/参考时钟的历史数据文件(需 dumpdir 指定目录)。 |
-R | 忽略 initstepslew 和 makestep 指令(常与 -r 结合用于重启)。 |
-s | 从硬件时钟(RTC)或 driftfile 的最后修改时间设置系统时间(Linux 系统支持)。 |
-t timeout |
设置超时时间(秒),超时后退出。 |
-u user |
启动后切换为指定用户(默认 chrony ),需依赖 libcap (Linux)。 |
-F level |
启用 seccomp 过滤器(Linux 专用),限制系统调用。 |
-P priority | 在 Linux 中使用实时调度器(SCHED_FIFO),优先级 0-100;在 macOS 中启用时间约束策略。 |
-m | 锁定进程到内存,避免分页(Linux 专用)。 |
-x | 禁用系统时钟控制(仅用于 NTP 服务器模式,不调整本地时间)。 |
-v |
显示版本号并退出。 |
(2)配置文件 (/etc/chrony.conf)
关键配置项包括:
server: | 指定 NTP 服务器(如 server 0.pool.ntp.org iburst )。 |
---|---|
driftfile: | 记录系统时钟偏差的文件路径(如 /var/lib/chrony/drift)。 |
makestep: | 允许在首次启动时快速调整时间(如 makestep 1.0 3/7200)。 |
rtcsync: | 启用内核每 11 分钟同步硬件时钟(RTC)。 |
logdir: | 指定日志目录(如 /var/log/chrony)。 |
(3)使用场景示例:
1 |
|
四、内网环境下服务配置
其他的先看一下稀土掘金里的收藏文章
Linux时间校准——Chrony
https://bote798.top/2025/05/19/Linux时间校准——Chrony/