Linux运维入门第四章(4-3):时间同步chrony——从安装配置到内网服务器搭建,一篇掌握!
前言
你好,欢迎来到 Linux 运维第四章的第三部分!
前面我们学习了用户管理、权限控制和 sudo 权限委派,你已经能够构建一个安全、精细化的权限体系了。但还有一个容易被忽略却至关重要的环节——时间同步。
时间不准会引发哪些问题?
| 场景 | 时间不准会出什么问题 |
|---|---|
| 日志分析 | 排查故障时看不懂时间顺序,无法定位问题发生的先后 |
| HTTPS 证书 | 服务器时间偏差大,浏览器提示"证书无效" |
| 系统登录 | JWT Token 验证失败,用户无法登录 |
| 分布式系统 | 多台服务器时间不一致,无法判断请求先后顺序 |
| 定时任务 | Cron 任务在不准确的时间执行,导致业务异常 |
一句话总结:时间不准,系统就可能出问题。
今天我们将系统学习:
- chrony 概述:chrony 是什么,组件有哪些
- 安装配置:Rocky 和 Ubuntu 的安装与配置文件详解
- 查看同步状态:
chronyc sources -v与chronyc tracking - 强制同步:
chronyc makestep解决大偏差问题 - 修改时区:
timedatectl设置时区 - 内网时间服务器搭建:让内网所有机器从一台服务器同步时间
学完今天的内容,你将能让服务器时间保持精准,避免因时间问题引发的各种故障。
好,让我们正式开始今天的旅程 🚀
一、chrony 是什么?
chrony 是 Linux 系统的时间同步工具,让服务器时间保持准确。它是 NTP(Network Time Protocol)协议的一个实现,相比传统的 ntpd,chrony 具有更快同步速度、更好适应网络波动等优势。
chrony 的两个核心组件:
| 组件 | 说明 |
|---|---|
| chronyd | 后台守护进程,持续同步时间 |
| chronyc | 命令行工具,查看同步状态和进行控制 |
二、安装配置
2.1 安装 chrony
# Rocky Linux
dnf install -y chrony
# Ubuntu
apt install -y chrony
2.2 配置 chrony.conf
配置文件位于 /etc/chrony.conf。以下是推荐配置:
cat > /etc/chrony.conf << 'EOF'
# 使用中国区 NTP 服务器池(自动轮询,国内速度快)
pool cn.pool.ntp.org iburst
# 备用方案(任选其一,注释掉上面的 pool 即可使用)
# server time1.aliyun.com iburst
# server ntp.aliyun.com iburst
# 允许内网客户端查询(作为时间服务器时启用)
allow 192.168.0.0/16
# 记录系统时钟的晶振偏差,让 chrony 长期运行更精准
driftfile /var/lib/chrony/drift
# 当偏差 > 1 秒时,在启动后的前 3 次同步中执行步进(跳转),之后只做缓慢微调
makestep 1.0 3
# 自动将系统时间写入硬件时钟(相当于定期执行 hwclock --systohc)
rtcsync
# NTP 认证密钥文件(一般用不到)
keyfile /etc/chrony.keys
# 日志目录
logdir /var/log/chrony
EOF
配置文件参数解读:
| 参数 | 含义 |
|---|---|
pool cn.pool.ntp.org iburst | 使用中国区 NTP 服务器池,iburst 表示快速同步 |
allow 192.168.0.0/16 | 允许内网客户端查询(作为时间服务器时启用) |
driftfile | 记录晶振偏差,让 chrony 长期运行更精准 |
makestep 1.0 3 | 偏差 > 1 秒时,启动后前 3 次同步执行跳转 |
rtcsync | 自动将系统时间写入硬件时钟 |
2.3 启动服务
# Rocky Linux
systemctl enable --now chronyd
# Ubuntu
systemctl enable --now chrony
检查服务状态:
systemctl status chronyd # Rocky
systemctl status chrony # Ubuntu
三、查看同步状态
3.1 chronyc sources -v —— 查看时间源
chronyc sources -v
正常输出示例:
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- 139.199.215.251 2 6 377 53 -13ms[ -14ms] +/- 69ms
^- ntp.wdc2.us.leaseweb.net 3 6 77 111 +18ms[ +18ms] +/- 140ms
^* 119.28.183.184 2 6 377 51 +749us[ +105us] +/- 51ms
^+ 139.199.214.202 2 6 377 50 -1551us[-1551us] +/- 45ms
第一列状态标识(最关键):
| 符号 | 含义 |
|---|---|
^? | ❌ 不可达,连不上服务器 |
^- | ⚠️ 被否决(偏差较大,暂不使用) |
^* | ✅ 当前正在使用的主同步源(最佳状态) |
^+ | ✅ 备选同步源(可用,留作备份) |
^~ | ⚠️ 变化过大,不可靠 |
💡 关注点:确保至少有一个时间源的标识是
^*(当前最佳)或^+(备选可用)。
字段解读:
| 字段 | 含义 |
|---|---|
Stratum | NTP 层级(数值越小越接近原子钟,越准) |
Poll | 轮询间隔(2 的幂次方秒) |
Reach | 可达性寄存器(377 表示连续 8 次成功) |
LastRx | 最后一次收到响应的时间 |
Last sample | 时间偏差值 |
3.2 问题排查:时间偏差太大怎么办?
如果看到 Last sample 列显示 -1057s,表示当前系统时间比 NTP 服务器慢了 1057 秒(约 17.6 分钟)。chrony 默认不会一次性跳转这么大的偏差,所以显示 ^?(不可用)或 ^-(被否决)。
解决方案:强制立即跳转
chronyc makestep
输出示例:
200 OK
等待几秒后再次查看:
chronyc sources -v
此时应看到类似 ^* 或 ^+ 的状态,偏差值变为毫秒级。
3.3 chronyc tracking —— 查看同步精度
chronyc tracking
输出示例:
Reference ID : 771CB7B8 (119.28.183.184)
Stratum : 3
Ref time (UTC) : Tue Jul 21 16:04:51 2026
System time : 0.000665029 seconds slow of NTP time
Last offset : -0.000174099 seconds
RMS offset : 187.181152344 seconds
Frequency : 3.430 ppm fast
Residual freq : -0.038 ppm
Skew : 5.643 ppm
Root delay : 0.052886885 seconds
Root dispersion : 0.019477306 seconds
Update interval : 64.3 seconds
Leap status : Normal
字段解读:
| 字段 | 含义 | 关注点 |
|---|---|---|
Reference ID | 当前同步的时间服务器 ID | 应与 sources 中的 ^* 行一致 |
Stratum | NTP 层级 | 越小越准(1 为原子钟) |
System time | 系统时间偏差 | 接近 0 表示时间精准 |
Last offset | 上次校正偏差 | 越小越好 |
Frequency | 晶振频率偏差 | 硬件晶振的误差 |
Leap status | 闰秒状态 | Normal 表示正常 |
四、查看与修改系统时间
4.1 date —— 查看系统时间
date
Rocky 和 Ubuntu 默认时区可能不同:
| 发行版 | 时间显示 | 时区 |
|---|---|---|
| Rocky | Wed Jul 22 00:09:53 CST 2026 | CST(北京时间,UTC+8) |
| Ubuntu | Tue Jul 21 16:09:44 UTC 2026 | UTC(协调世界时) |
两台机器的实际 UTC 时间是一致的,只是时区显示不同。
4.2 timedatectl —— 修改时区
# 1. 查看当前时区设置
timedatectl
# 2. 列出所有可用时区
timedatectl list-timezones | grep Asia
# 3. 将时区改为北京时间
timedatectl set-timezone Asia/Shanghai
# 4. 确认时间是否正确
date
输出示例:
Wed Jul 22 00:17:14 CST 2026
# 5. 确认时区设置
timedatectl
输出示例:
Local time: Wed 2026-07-22 00:17:33 CST
Universal time: Tue 2026-07-21 16:17:33 UTC
RTC time: Tue 2026-07-21 16:17:33
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
手动配置时区(备选方法):
echo "Asia/Shanghai" > /etc/timezone
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
五、搭建内网时间服务器【扩展】
当内网有多台服务器时,可以搭建一台内网时间服务器,让其他机器从它同步时间,避免每台机器都去公网 NTP 服务器同步。
上游时间源(cn.pool.ntp.org / ntp.aliyun.com)
│
▼ 轮询同步
内网时间服务器(192.168.1.10)
│
├── Web 服务器
├── 数据库服务器
└── 缓存服务器
5.1 服务端配置
在 /etc/chrony.conf 中配置:
# 上游时间源
pool cn.pool.ntp.org iburst
# 允许内网客户端查询(关键配置!)
allow 192.168.0.0/16
# 其他配置保持不变...
5.2 开放防火墙端口
NTP 使用 UDP 123 端口:
firewall-cmd --add-service=ntp --permanent
firewall-cmd --reload
5.3 客户端配置
在客户端机器上,将 /etc/chrony.conf 中的时间源改为内网时间服务器 IP:
# 注释掉公网 NTP 服务器
# pool cn.pool.ntp.org iburst
# 使用内网时间服务器
server 192.168.1.10 iburst
重启服务:
systemctl restart chronyd # Rocky
systemctl restart chrony # Ubuntu
验证同步状态:
chronyc sources -v
六、结语
恭喜你!😊 到这里,你已经完成了 Linux 运维第四章(4-3)的全部学习内容。
今天我们系统学习了:
- 时间同步的重要性:日志分析、HTTPS 证书、分布式系统
- chrony 组件:chronyd(后台服务)+ chronyc(命令行工具)
- 安装配置:Rocky 和 Ubuntu 的安装,
/etc/chrony.conf配置详解 - 查看同步状态:
chronyc sources -v查看时间源、chronyc tracking查看精度 - 问题排查:
chronyc makestep解决时间偏差太大的问题 - 修改时区:
timedatectl set-timezone Asia/Shanghai - 内网时间服务器搭建:让内网所有机器从一台服务器同步时间
时间同步看似小事,但一旦出问题,排查起来可能非常痛苦。掌握了今天的内容,你就能避免因时间不准引发的各种"诡异"故障。
如果在学习过程中遇到任何问题,欢迎在评论区留言讨论!也别忘了点赞收藏,方便以后查阅~
附录:核心知识点速查表
| 你想干什么 | 敲什么命令 |
|---|---|
| 安装 chrony(Rocky) | dnf install -y chrony |
| 安装 chrony(Ubuntu) | apt install -y chrony |
| 启动 chrony 服务(Rocky) | systemctl enable --now chronyd |
| 启动 chrony 服务(Ubuntu) | systemctl enable --now chrony |
| 查看时间源状态 | chronyc sources -v |
| 查看同步精度 | chronyc tracking |
| 强制立即同步 | chronyc makestep |
| 查看系统时间 | date |
| 查看时区设置 | timedatectl |
| 修改时区为北京时间 | timedatectl set-timezone Asia/Shanghai |
| 列出所有时区 | timedatectl list-timezones |
| 查看服务状态(Rocky) | systemctl status chronyd |
| 查看服务状态(Ubuntu) | systemctl status chrony |
| 重启服务(Rocky) | systemctl restart chronyd |
| 重启服务(Ubuntu) | systemctl restart chrony |
| 开放防火墙 NTP 端口 | firewall-cmd --add-service=ntp --permanent |
附录:chronyc sources -v 状态标识速查
| 符号 | 含义 | 操作建议 |
|---|---|---|
^* | 当前正在使用的主同步源 | ✅ 状态正常,无需操作 |
^+ | 备选同步源 | ✅ 状态正常,作为备份 |
^- | 被否决(偏差较大) | 执行 chronyc makestep 强制同步 |
^? | 不可达,连接失败 | 检查网络或防火墙 |
^~ | 变化过大 | 检查网络稳定性 |
附录:chronyc tracking 关键字段速查
| 字段 | 正常值 | 异常值 |
|---|---|---|
Leap status | Normal | 非 Normal 表示闰秒状态异常 |
System time | 接近 0 | 大于 1 秒表示时间偏差较大 |
Stratum | 2-5 | 16+ 表示时间源不可用 |
附录:chrony.conf 参数速查
| 参数 | 含义 |
|---|---|
pool cn.pool.ntp.org iburst | 使用中国区 NTP 服务器池 |
server ntp.aliyun.com iburst | 使用阿里云 NTP 服务器 |
allow 192.168.0.0/16 | 允许内网客户端查询 |
driftfile /var/lib/chrony/drift | 晶振偏差记录文件 |
makestep 1.0 3 | 偏差 > 1 秒时,前 3 次同步跳转 |
rtcsync | 自动写入硬件时钟 |
logdir /var/log/chrony | 日志目录 |
附录:常用 NTP 服务器地址
| 服务器地址 | 说明 |
|---|---|
cn.pool.ntp.org | 中国区 NTP 服务器池 |
time1.aliyun.com | 阿里云时间服务器 1 |
ntp.aliyun.com | 阿里云时间服务器 2 |
time.windows.com | Windows 默认时间服务器 |
pool.ntp.org | 全球 NTP 服务器池 |
更多推荐
所有评论(0)