万字详解|Linux Chrony 时间服务完整学习手册

目录

[一、Chrony 基础理论知识](#一、Chrony 基础理论知识)

[1.1 工作协议与通信端口](#1.1 工作协议与通信端口)

[1.2 角色划分](#1.2 角色划分)

[1.3 Chrony 核心优势](#1.3 Chrony 核心优势)

[1.4 系统预装规则](#1.4 系统预装规则)

[二、Chrony 软件安装与服务基础管理](#二、Chrony 软件安装与服务基础管理)

[2.1 软件安装](#2.1 软件安装)

[2.1.1 安装命令](#2.1.1 安装命令)

[2.1.2 安装验证](#2.1.2 安装验证)

[2.2 服务启停与开机自启Chrony 的后台进程名称为 chronyd,系统服务单元名称为 chronyd.service,所有服务操作命令遵循 Systemd 标准语法,全系统统一。](#2.2 服务启停与开机自启Chrony 的后台进程名称为 chronyd,系统服务单元名称为 chronyd.service,所有服务操作命令遵循 Systemd 标准语法,全系统统一。)

三、核心配置文件全参数详解

[3.1 通用基础配置(服务端、客户端共用)](#3.1 通用基础配置(服务端、客户端共用))

[3.2 服务端专属配置](#3.2 服务端专属配置)

[3.3 客户端专属配置](#3.3 客户端专属配置)

[四、防火墙与 SELinux 安全策略适配](#四、防火墙与 SELinux 安全策略适配)

[4.1 学习测试环境方案](#4.1 学习测试环境方案)

[4.2 企业生产环境方案](#4.2 企业生产环境方案)

五、系统时区与时间管理

[5.1 时区配置](#5.1 时区配置)

[5.2 时间状态全量查看](#5.2 时间状态全量查看)

六、同步状态查询与字段释义

[6.1 状态标识含义](#6.1 状态标识含义)

[6.2 Reach 字段解读](#6.2 Reach 字段解读)

[七、Chrony 缓存机制](#七、Chrony 缓存机制)

八、标准架构实战部署流程

[8.1 部署规划](#8.1 部署规划)

[8.2 服务端部署步骤](#8.2 服务端部署步骤)

[8.3 客户端部署步骤](#8.3 客户端部署步骤)

九、常见故障分类与标准化排查思路

[9.1 通信类故障](#9.1 通信类故障)

[9.2 服务运行类故障](#9.2 服务运行类故障)

[9.3 时间策略类故障](#9.3 时间策略类故障)

[9.4 缓存干扰故障](#9.4 缓存干扰故障)

[十、实战例题:Chrony 内网时间同步服务完整部署与排错](#十、实战例题:Chrony 内网时间同步服务完整部署与排错)

[10.1 实验环境说明](#10.1 实验环境说明)

[10.2 软件安装(两台主机均执行)](#10.2 软件安装(两台主机均执行))

[10.3 服务端配置与验证](#10.3 服务端配置与验证)

[10.3.1 编辑配置文件](#10.3.1 编辑配置文件)

[10.3.2 服务启停与自启](#10.3.2 服务启停与自启)

[10.3.3 实验环境安全策略处理(配置过可忽略)](#10.3.3 实验环境安全策略处理(配置过可忽略))

[10.3.4 服务端同步状态验证](#10.3.4 服务端同步状态验证)

[10.4 客户端配置](#10.4 客户端配置)

[10.4.1 编辑配配置](#10.4.1 编辑配配置)

[10.4.2 重启服务并查看状态](#10.4.2 重启服务并查看状态)

[10.5 故障现象与解决方法](#10.5 故障现象与解决方法)

[10.5.1 故障 1:客户端显示 ^?,Reach=0](#10.5.1 故障 1:客户端显示 ^?,Reach=0)

[10.5.2 故障 2:Reach>0 但仍显示 ^?](#10.5.2 故障 2:Reach>0 但仍显示 ^?)


开篇概述

本文作为完整学习手册,将系统性讲解 Chrony 的理论知识、软件安装、服务管理、配置文件全参数解析、不同场景部署方案、时区与时间管理、状态查询、缓存机制以及各类故障排查思路,内容兼顾理论与实战,适合 Linux 初学者夯实基础,也可作为运维人员日常查阅的参考文档。

一、Chrony 基础理论知识

1.1 工作协议与通信端口

Chrony 基于 NTP(网络时间协议) 实现时间校准与同步,这是互联网通用的时间同步标准协议。在数据传输过程中,Chrony 默认使用 UDP 123 端口进行通信。 UDP 协议面向无连接的特性,能够满足时间同步低延迟、高频交互的需求,这也是 NTP 协议长期选用 UDP 123 端口的核心原因。在后续部署与排错中,该端口是重点关注对象,防火墙、安全策略对 123 端口的拦截,是造成同步失败的高频原因。

1.2 角色划分

Chrony 在实际应用中分为两种核心角色,两种角色搭配使用,构成完整的时间同步架构:

  1. 服务端:主动连接互联网上的公共 NTP 时间源,完成自身系统时间校准,同时对外提供时间同步服务,为局域网内其他设备分发标准时间。
  2. 客户端:不直接对接公网时间源,以内网 Chrony 服务端作为唯一时间参考,拉取标准时间并校准本机时钟。

企业主流架构为 "分层同步架构",一台中心 Chrony 服务端对接公网,全网内网设备统一同步这台服务端,既保证时间统一,又减少内网设备对公网的访问,提升内网安全性。

1.3 Chrony 核心优势

相较于传统 ntpd 服务,Chrony 的优势覆盖精度、适配性、稳定性等多个维度,这也是各大 Linux 发行版全面切换至 Chrony 的关键:

  • 同步精度更高:Chrony 可实现微秒级时间校准,ntpd 仅能做到毫秒级,在高精度业务场景中优势明显。
  • 复杂环境适配性强:针对网络波动、服务器长期挂机、虚拟机休眠唤醒、云服务器动态网络等场景,Chrony 可以持续计算时钟偏差,维持时间稳定。
  • 资源占用极小:后台进程常驻运行,CPU、内存消耗极低,不会对服务器上的业务程序造成性能挤压。
  • 断网代偿能力:服务端在断开公网的情况下,可将本机已校准的时间作为标准,继续为内网客户端提供同步服务,保障内网时间体系不崩溃。

1.4 系统预装规则

RHEL、Rocky Linux 官方原版镜像,无论选择最小化安装,还是带图形界面的工作站安装,默认预装并启用 Chrony 服务,开箱即可使用。 部分教学镜像、机房定制精简镜像,为缩小系统体积、简化环境,会主动移除 Chrony 软件包。此类环境中,需要运维人员手动执行安装命令。该现象属于镜像定制行为,并非系统默认配置。

二、Chrony 软件安装与服务基础管理

2.1 软件安装

本文实验环境为 RHEL 9、Rocky Linux 9,系统默认使用 dnf/yum 作为包管理工具,两套系统安装命令完全通用。

2.1.1 安装命令
bash 复制代码
yum install chrony -y
点击并拖拽以移动

执行命令后,系统会自动下载并安装 Chrony 主程序及相关依赖包。

2.1.2 安装验证

安装完成后,可通过软件查询命令,确认程序是否正常部署:

bash 复制代码
rpm -q chrony
点击并拖拽以移动

若输出软件名称与版本号,代表安装成功;若提示软件未安装,则说明安装过程异常,需要重新执行安装操作。

2.2 服务启停与开机自启Chrony 的后台进程名称为 chronyd,系统服务单元名称为 chronyd.service,所有服务操作命令遵循 Systemd 标准语法,全系统统一。

bash 复制代码
#启动服务:
systemctl start chronyd
#停止服务:
systemctl stop chronyd
#重启服务:
systemctl restart chronyd
#设置开机自启:
systemctl enable chronyd
#取消开机自启:
systemctl disable chronyd
#查看服务运行状态:
systemctl status chronyd
点击并拖拽以移动

重要规则 :修改 Chrony 主配置文件后,必须执行restart重启服务,新的配置参数才能生效,仅刷新配置无法完成加载。

三、核心配置文件全参数详解

/etc/chrony.conf 是 Chrony 唯一的主配置文件,服务的所有功能、时间源、访问权限、同步策略、时钟校准规则,均由该文件定义。文件内所有参数均为官方标准语法,无自定义模糊配置,下面分通用配置、服务端专属配置、客户端专属配置三大类逐一解析。

3.1 通用基础配置(服务端、客户端共用)

此类配置作用于所有角色,主要用于控制时钟偏差记录、时间跳变规则、硬件时钟同步,是文件中不可或缺的基础项。

  1. driftfile /var/lib/chrony/drift 硬件时钟存在物理固有误差,长期运行会出现快慢偏差。该配置指定偏差记录文件路径,Chrony 会持续统计硬件时钟的运行误差,并记录到该文件中,依托历史数据实现长期精准校准。

  2. makestep 1.0 3 时间跳变安全策略,语法格式为 makestep 偏差阈值 生效次数。 默认参数含义:当本机时间与标准时间差值小于 1 秒时,允许直接跳转校准时间;该规则仅在前 3 次同步操作中生效。 设置该策略的目的,是避免服务器在业务运行过程中出现大幅时间跳变,防止日志错乱、数据库事务中断等问题。若设备初始时间偏差极大,可临时调大阈值,同步完成后恢复默认值。

  3. rtcsync 该参数的作用是定期将系统软件时间,同步写入主板 RTC 硬件时钟。服务器关机、重启后,系统会读取硬件时钟作为初始时间,开启此参数可以保证硬件时钟持续准确,避免重启后时间重置错乱。

3.2 服务端专属配置

部署内网中心时间服务器时,需要额外配置公网时间源、内网访问权限、断网代偿功能,这三项是服务端的核心配置。

  1. server 公网时间源地址 iburst 用于指定上层 NTP 公共时间源,服务端将以此为基准校准本机时间。 常用公共时间源:阿里云 ntp.aliyun.com、腾讯云 time1.qq.com、国家授时中心 cn.ntp.org.cniburst 是配套参数,作用为服务启动后,快速发送多组同步请求,缩短首次同步的耗时,实现开机快速校时。

  2. allow IP 地址 / 网段 访问权限控制配置,决定哪些设备可以连接当前服务端同步时间。 格式支持两种写法:填写单个 IP,仅允许该一台设备访问;填写网段(如 192.168.22.0/24),允许整个网段内所有设备访问。未被 allow 规则放行的主机,会被服务端拒绝连接,同步直接失败。

  3. local stratum 10 开启本地时钟代偿功能,企业生产环境必配参数。 当服务端因网络故障断开公网、无法连接上层时间源时,该参数会让服务端将本机当前时间作为标准时间,继续为内网客户端提供同步服务,保证内网时间架构正常运行。若缺少此配置,公网断连后,服务端将停止对外服务。

3.3 客户端专属配置

客户端核心需求是指定同步源,根据场景选择对接公网或内网服务端,同时可按需开启身份认证。

  1. server 目标时间源地址 iburst 指定客户端需要同步的时间服务器地址。对接内网 Chrony 服务端时,填写服务端 IP 地址即可,搭配 iburst 参数实现快速同步。

  2. keyfile /etc/chrony.keys 密钥认证配置,用于高安全等级内网环境。客户端与服务端通过密钥完成身份校验,防止非法设备接入。普通学习环境、信任内网可直接注释该行,关闭认证功能,简化部署流程。

  3. 屏蔽多余时间源 若客户端要求仅同步内网服务端,需要将配置文件中默认自带的 serverpool 等公网时间源配置全部注释或删除,避免客户端跨网请求公网时间源,违背部署规划。

四、防火墙与 SELinux 安全策略适配

NTP 协议依赖 UDP 123 端口通信,Linux 系统默认的防火墙、SELinux 安全机制,会拦截陌生端口的数据包,进而导致 Chrony 同步失败。针对不同使用场景,有两套标准处理方案。

4.1 学习测试环境方案

测试环境以快速调试、简化操作为目标,可直接关闭防护机制:

  1. 1关闭防火墙并取消开机自启

    systemctl stop firewalld
    systemctl disable firewalld

  2. 2临时关闭 SELinux(重启系统后失效)

    setenforce 0

该方式操作简单,可彻底规避端口拦截问题,适合日常实验、功能测试。

4.2 企业生产环境方案

生产环境严禁直接关闭防火墙与 SELinux,需要在保留安全防护的前提下,手动放行 UDP 123 端口。 以 firewalld 为例,执行命令永久放行 NTP 端口:

复制代码
firewall-cmd --permanent --add-port=123/udp
firewall-cmd --reload

执行完成后,防火墙永久允许 UDP 123 端口的数据传输,同时不影响其他安全规则。SELinux 可根据企业安全规范,添加对应的访问规则,保证服务正常运行。

五、系统时区与时间管理

时区和系统时间是两个独立概念,时区仅控制时间的展示格式,不会修改时钟本身的数值,集群环境必须统一时区与系统时间。

5.1 时区配置

国内服务器统一使用亚洲 / 上海时区,标准配置命令:

复制代码
timedatectl set-timezone Asia/Shanghai

集群内所有设备必须执行该命令,保证日志、任务记录的时间展示格式一致。仅统一时区,无法修复设备之间的时钟偏差。

5.2 时间状态全量查看

timedatectl 是系统标准时间查看命令,执行后可一次性查看本地时间、硬件时钟、时区、NTP 同步开关、同步状态等全部信息,是日常巡检的常用命令。

六、同步状态查询与字段释义

部署完成后,使用专用命令查看 Chrony 同步状态,根据输出的标识、字段,可直观判断同步是否正常。核心查询命令:

复制代码
chronyc sources -v

6.1 状态标识含义

输出结果首列的符号为官方固定状态标识,是排错的核心依据:

  1. ^*:正常状态。本机已成功同步该时间源,当前时间源为最优、最可靠的参考源。
  2. ^?:异常状态。时间源不可用,触发原因包含网络不通、端口拦截、权限拒绝、时间偏差超限等。

6.2 Reach 字段解读

Reach 为八进制统计数值,用于统计客户端与时间源之间的报文收发成功率:

  1. Reach = 0:双向报文收发完全失败,问题集中在网络不通、UDP 123 端口被拦截、服务端未配置 allow 放行。
  2. Reach > 0:报文可以正常收发,网络与端口通信正常,故障原因多为时间偏差过大、缓存干扰等。

七、Chrony 缓存机制

Chrony 会将历史时钟偏差、同步日志、设备状态等数据,统一缓存至 /var/lib/chrony/ 目录下。该目录内的缓存文件具备持久化特性,不会随着服务重启、配置修改自动清空

在部分场景下,即便配置、网络、时间全部修复,旧缓存依然会干扰服务判断,导致同步状态异常。此时需要手动清理缓存,标准操作流程:

  1. 停止 chronyd 服务;
  2. 清空缓存目录所有文件;
  3. 重新启动服务。

参考命令:

复制代码
systemctl stop chronyd
rm -rf /var/lib/chrony/*
systemctl start chronyd

清理缓存后,服务会重新加载配置、重新探测时间源,恢复正常同步逻辑。

八、标准架构实战部署流程

结合企业主流的内网分层时间同步架构,梳理一套可直接落地的标准化部署流程,分为服务端部署、客户端部署两大环节。

8.1 部署规划

  1. 中心 Chrony 服务端:192.168.22.128,对接公网时间源,对内网提供同步服务;
  2. 内网客户端:192.168.22.130,仅同步中心服务端,不访问公网时间源。

8.2 服务端部署步骤

  1. 检查并确认 Chrony 软件已安装,若未安装则执行 yum 命令手动安装;
  2. 编辑 /etc/chrony.conf,写入公网时间源、内网网段放行、local stratum 等核心配置;
  3. 根据环境需求处理防火墙与 SELinux,放行 UDP 123 端口或临时关闭防护;
  4. 执行systemctl restart chronyd重启服务,并设置开机自启;
  5. 执行chronyc sources -v验证,出现^*标识,代表服务端公网同步正常。

8.3 客户端部署步骤

  1. 编辑 /etc/chrony.conf,注释所有公网时间源配置,添加服务端 IP 作为唯一同步源;
  2. 注释 keyfile 密钥配置,关闭身份认证;
  3. 统一客户端时区为亚洲 / 上海;
  4. 重启 chronyd 服务;
  5. 查看同步状态,出现^*即为部署完成。

九、常见故障分类与标准化排查思路

结合 Chrony 运行原理与实战经验,将高频故障分为四大类,明确故障现象、成因以及自上而下的排查顺序,做到精准定位问题。

9.1 通信类故障

现象 :状态标识为^?,Reach 字段等于 0。 成因 :客户端与服务端网络不通、UDP 123 端口被防火墙拦截、服务端未配置 allow 放行规则。 排查顺序

  1. 使用 ping 命令测试客户端与服务端网络连通性;
  2. 检查两端防火墙规则,确认 UDP 123 端口已放行;
  3. 核对服务端allow配置,确认客户端 IP / 网段在放行范围内。

9.2 服务运行类故障

现象 :网络通信正常,但服务端无法对外提供时间服务。 成因 :chronyd 服务未正常启动、服务端缺失local stratum配置,公网断连后停止服务。 排查顺序

  1. 执行systemctl status chronyd,检查服务是否处于运行状态;
  2. 打开主配置文件,核对local stratum参数是否配置完整。

9.3 时间策略类故障

现象 :Reach 字段大于 0,链路通信正常,但状态依旧显示^?成因 :客户端与时间源时间差值过大,触发makestep时间跳变限制,服务拒绝执行大幅校准。 排查顺序

  1. 使用timedatectl查看两端系统时间,确认时差大小;
  2. 手动执行命令对齐两端时间;
  3. 临时调大makestep阈值,同步完成后恢复默认配置。

9.4 缓存干扰故障

现象 :配置、网络、端口、系统时间全部正常,同步状态异常。 成因/var/lib/chrony/目录下的旧缓存数据持续干扰服务逻辑。 排查顺序:按照标准流程停止服务、清空缓存、重启服务,重新校验同步状态。

十、实战例题:Chrony 内网时间同步服务完整部署与排错

10.1 实验环境说明

  • 服务端:192.168.22.128(RHEL 9 图形界面版,教学镜像未预装 Chrony)
  • 客户端:192.168.22.130(Rocky Linux 9,教学镜像未预装 Chrony)
  • 实验目标:客户端不连接公网,仅同步内网 Chrony 服务端时间,实现集群时间统一。

10.2 软件安装(两台主机均执行)

复制代码
yum install chrony -y
rpm -q chrony

10.3 服务端配置与验证

10.3.1 编辑配置文件
复制代码
vi /etc/chrony.conf

核心配置(有的就不用重复):

bash 复制代码
#先注释掉之前的再写入新的
server ntp.aliyun.com iburst
allow 192.168.22.130/24
local stratum 10
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
10.3.2 服务启停与自启
复制代码
systemctl restart chronyd
systemctl enable chronyd
systemctl status chronyd
10.3.3 实验环境安全策略处理(配置过可忽略)
复制代码
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
10.3.4 服务端同步状态验证
复制代码
chronyc sources -v

出现 ^* 标识,说明服务端已成功同步公网时间。

10.4 客户端配置

10.4.1 编辑配配置
复制代码
vi /etc/chrony.conf
  • 注释所有默认公网 serverpool 时间源

  • 注释 keyfile /etc/chrony.keys

  • 添加内网服务端配置:

    server 192.168.22.128 iburst
    driftfile /var/lib/chrony/drift
    makestep 1.0 3
    rtcsync

10.4.2 重启服务并查看状态

客户端执行以下命令,验证同步状态:

复制代码
systemctl restart chronyd
chronyc sources -v

输出出现 ^* 192.168.22.128,说明客户端已成功同步内网服务端时间,实验完成。

10.5 故障现象与解决方法

10.5.1 故障 1:客户端显示 ^?,Reach=0
  • 原因:防火墙、SELinux 拦截 UDP 123 端口
  • 解决:执行安全策略关闭命令,关闭防护组件。
10.5.2 故障 2:Reach>0 但仍显示 ^?
  • 原因:虚拟机时钟漂移导致时间差过大,触发 makestep 时间跳变限制,/var/lib/chrony/ 目录旧缓存干扰

  • 解决:清空缓存并重启服务

    systemctl stop chronyd
    rm -rf /var/lib/chrony/*
    systemctl start chronyd

相关推荐
疯狂成瘾者1 小时前
GHCR 是什么?GitHub 容器镜像仓库技术介绍
java·linux
QFIUNE1 小时前
使用 MMseqs2 计算多个 DTI 数据集的蛋白序列相似度
linux·python·ubuntu
Li-Yongjun1 小时前
Linux 内核等待队列(Wait Queue)
linux·运维·windows
字节高级特工1 小时前
【Linux】深入理解C语言命令行参数与环境变量
linux·c++·人工智能·后端
linux开发之路2 小时前
C++项目推荐:eBPF+调度器性能分析框架
linux·c++·ebpf·火焰图·调度器
humors2212 小时前
Windows运维与安全场景合集(不定期更新)
大数据·运维·服务器·程序人生·网络安全
SAP上海工博云署2 小时前
2026年中小企业SAP服务商选型技术解析
大数据·运维·数据库·人工智能·信息可视化·运维开发·信息与通信
愿天垂怜2 小时前
【C++脚手架】ffmpeg 库的介绍与使用
linux·服务器·开发语言·c++·ide·git·ffmpeg
WXDcsdn2 小时前
联想服务器使用RAID卡组建RAID(企业服务器解决方案)
运维·服务器