Linux时间校准——Chrony

一、概述

Chrony是一款开源的网络时间协议(NTP)客户端和服务端软件,旨在提供高精度的时间同步功能。相较于传统的 NTP 实现如 ntpdChrony提供了一些改进和优势,包括更快的同步速度、低延迟、低CPU占用和低内存消耗。以下是 Chrony的几个关键特性和使用场景:

组成

  • chronyd:这是一个后台守护进程,负责与时间服务器通信,根据网络条件和系统时钟特性动态调整内核中的系统时钟,以最小化时间和频率误差。它能够智能地应对网络延迟、间歇性连接、时钟漂移以及虚拟环境中的不稳定性。
  • chronyc:这是一个命令行工具,为用户提供了一个界面来监控Chrony的性能、查看同步状态、调整配置参数以及手动执行某些操作,如立即同步或查看时间源的状态。

特点:

  1. 快速同步Chrony使用特殊算法能快速减少系统时钟的偏移和频率误差,非常适合那些非24小时运行的系统,如虚拟机。
  2. 频率调整:能够更有效地应对时钟频率的快速变化,适合于拥有不稳定时钟的虚拟环境或受节能技术影响的系统。
  3. 节能技术兼容性:即使在节能技术导致CPU频率变化的系统中也能保持良好的时间同步。
  4. 灵活配置:支持多种同步源,包括NTP服务器、GPS接收器或其他参考时钟,以及手动时间输入。

使用场景:

  1. 企业服务器:确保数据中心内的所有服务器保持时间同步,这对于日志记录、交易时间戳、数据一致性等至关重要。
  2. 桌面系统:提高个人电脑的时间精度,尤其是对于依赖精确时间的应用,如开发环境、金融交易软件或科学计算。
  3. 嵌入式系统和物联网设备:在资源有限的设备上,Chrony的低资源消耗特性使其成为理想的选择。
  4. 虚拟环境:在云服务器或虚拟机中,Chrony能有效应对由于虚拟化带来的时钟漂移问题。
  5. 高精度应用:科研机构、天文观测、卫星通信等领域,需要高度精确时间同步的应用场景。

二、安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#查看当前时区
timedatectl

#时区不一致时,时区改为亚洲上海
timedatectl set-timezone Asia/Shanghai

# 1.安装
yum install chrony

# 2.备份原配置文件
cp /etc/chrony.conf /etc/chrony.conf_bak

# 3.修改配置文件
vim /etc/chrony.conf
#####################################################
# 使用阿里云NTP服务器(国内推荐)
server ntp.aliyun.com iburst
# 使用腾讯云NTP服务器
server ntp.tencent.com iburst
# 使用公共NTP池
pool pool.ntp.org iburst

# 允许其他客户端同步时间(可选)
# allow 192.168.135.0/24

# 启用硬件时间同步
rtcsync

# 记录时间偏差日志
logdir /var/log/chrony
#####################################################

# 4.启动服务
# 设置开机自启
systemctl enable chronyd
# 重启服务
systemctl restart chronyd
# 查看状态
systemctl status chronyd
# 5.验证同步情况
chronyc sources -v
# 查看本机时间
date

systemctl status chronyd

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@node1-142 etc]# systemctl status chronyd
● chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; preset: enabled)
Active: active (running) since Mon 2025-05-19 20:15:03 CST; 13s ago
Docs: man:chronyd(8)
man:chrony.conf(5)
Main PID: 13058 (chronyd)
Tasks: 1 (limit: 21564)
Memory: 672.0K ()
CGroup: /system.slice/chronyd.service
└─13058 /usr/sbin/chronyd

5月 19 20:15:03 node1-142 systemd[1]: Starting NTP client/server...
5月 19 20:15:03 node1-142 chronyd[13058]: chronyd version 4.3 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND >
5月 19 20:15:03 node1-142 chronyd[13058]: Frequency 0.000 +/- 1000000.000 ppm read from /var/lib/chrony/drift
5月 19 20:15:03 node1-142 systemd[1]: Started NTP client/server.
5月 19 20:15:07 node1-142 chronyd[13058]: Selected source 203.107.6.88 (ntp.aliyun.com) # 这里说明已经索引到ntp服务器了

chronyc sources -v

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@node1-142 etc]# chronyc sources -v

.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current best, '+' = combined, '-' = not combined,
| / 'x' = may be in error, '~' = too variable, '?' = unusable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \

MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================

^* 203.107.6.88 2 6 37 21 +34us[ +505us] +/- 25ms
[root@node1-142 etc]# date
2025年 05月 19日 星期一 20:17:03 CST

以上为以公网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 忽略 initstepslewmakestep 指令(常与 -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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 1.启动并后台运行:
systemctl start chronyd
systemctl enable chronyd

# 2.快速同步时间:
chronyd -q 'server time.example.com iburst'

# 3.查看版本与退出:
chronyd -v

# 4.从硬件时钟设置时间:
chronyd -s

# 5.调试模式输出到终端:
chronyd -d

# 6.查看 Chrony日志
# 默认的日志路径在 /var/log/chrony/chronyd.log
cat /var/log/chrony/chronyd.log

# 或使用 journalctl 查看实时日志:
journalctl -u chronyd -f

四、内网环境下服务配置

其他的先看一下稀土掘金里的收藏文章


Linux时间校准——Chrony
https://bote798.top/2025/05/19/Linux时间校准——Chrony/
作者
bote798
发布于
2025年5月19日
许可协议