一篇文章看懂时间同步服务
Linux 系统时间与时区管理
一、时间与时钟类型
时钟类型 | 说明 | 管理工具 |
系统时钟 | 由 Linux 内核维护的软件时钟,基于时区配置显示时间 | timedatectl |
硬件时钟 (RTC) | 主板上的物理时钟,通常以 UTC 或本地时间存储,用于系统启动时初始化时间 | hwclock |
二、核心管理命令详解
1. 设置系统时间
命令
sudo timedatectl set-time "YYYY-MM-DD HH:MM:SS"
参数说明:
时间格式必须严格遵循 年-月-日 时:分:秒
支持 24 小时制,秒可省略(默认为 00)
设置系统时间为 2024 年 2 月 13 日 10:41:55
sudo timedatectl set-time "2024-02-13 10:41:55"
注意事项:
需要 root 权限
若系统启用了 NTP 时间同步服务(如 chronyd
或 systemd-timesyncd
),手动设置时间后可能被自动纠正
2. 查看与设置时区
2.1 列出所有可用时区
timedatectl list-timezones
过滤示例
查找亚洲时区
timedatectl list-timezones | grep Asia 输出: Asia/Shanghai Asia/Tokyo Asia/Dubai
2.2 设置系统时区
sudo timedatectl set-timezone "时区名称"
注意事项:
时区名称区分大小写
修改时区后,系统时间和日志时间戳将自动转换
推荐使用协调世界时 (UTC) 部署跨国服务器
3. 配置硬件时钟模式
sudo timedatectl set-local-rtc <0|1>
参数 | 说明 |
0 | 硬件时钟使用 UTC 时间 |
1 | 硬件时钟使用 本地时间 |
三、完整操作流程
查看当前时间配置
timedatectl 输出当前时区为 America/New_York
修改时区
sudo timedatectl set-timezone Asia/Shanghai
同步硬件时钟
sudo hwclock --systohc
使用 Chrony 实现 NTP 时间同步
一、Chrony 架构与核心组件
Chrony 是 RHEL 9 默认的 NTP 客户端/服务器软件
组件 | 运行模式 | 核心功能 |
---|---|---|
chronyd | 守护进程 | 负责与 NTP 服务器通信,持续调整系统时钟频率,补偿时钟漂移,实现高精度同步 |
chronyc | 命令行工具 | 提供实时监控、配置调整和同步状态查询的交互式界面 |
二、Chrony 客户端配置
1. 安装与基础配置
1.1 安装软件包
sudo dnf install -y chrony
2. 服务管理命令
操作 | 命令 | 说明 |
---|---|---|
启动服务 | sudo systemctl start chronyd | 初始化时间同步进程 |
设置开机自启 | sudo systemctl enable chronyd | 确保重启后自动同步 |
查看服务状态 | sudo systemctl status chronyd | 验证服务是否正常运行 |
重载配置 | sudo systemctl reload chronyd | 应用配置变更无需重启服务 |
3. 时间与时区初始化设置
3.1 设置系统时间基准
手动设定初始时间(可选,通常由 NTP 自动同步)
sudo timedatectl set-time "2024-02-13 10:41:55"
3.2 配置时区
列出所有时区
timedatectl list-timezones设置为上海时区
sudo timedatectl set-timezone Asia/Shanghai
3.3 硬件时钟模式
使用 UTC 模式(推荐,尤其多系统环境)
sudo timedatectl set-local-rtc 0同步硬件时钟
sudo hwclock --systohc
三、同步状态
时间源状态解读
通过 chronyc sources -v
查看详细时间源状态
符号 | 状态 | 解释 |
^ | Server(服务器模式) | 当前使用的上级 NTP 服务器 |
= | Peer(对等模式) | 与其他节点互为时间源(用于集群环境) |
# | Local(本地时钟) | 本地参考时钟 |
* | Current Synced(已同步) | 当前最佳时间源 |
+ | Acceptable(可接受) | 候选时间源,满足精度要求 |
- | Rejected(拒绝) | 因偏差过大或不可达被排除 |
? | Unreachable(不可达) | 网络连接失败或响应超时 |
x | False Ticker(假时钟) | 被算法判定为不可信源 |
~ | High Variability(高波动) | 时间波动超出阈值 |
搭建 Chrony 时间同步服务器
一、Chrony 服务端核心特性
端口使用:
UDP 323:Chrony 守护进程 (chronyd
) 默认管理端口
UDP 123:兼容 NTP 协议,用于与客户端通信(需开放)
核心优势:
快速同步:初始同步仅需分钟级,传统 NTP 需数小时
动态频率补偿:适应虚拟机时钟漂移和节能模式波动
低资源占用:间歇性网络环境下仍保持高精度
稳定性优化:抵抗网络拥塞和临时延迟影响
二、服务端配置文件详解
关键参数解析
参数 | 功能说明 | 安全建议 |
server <地址> iburst | 指定上游时间服务器,iburst 加速首次同步(发送 8 个探测包) | 至少配置 3 个不同源以提高可靠性 |
allow 0.0.0.0/0 | 允许所有 IP 的客户端连接 | 生产环境应限制为内网段 |
local stratum 10 | 当上游服务器不可用时,以本地时钟作为第 10 层时间源(防止服务中断) | 层级值建议 ≥10,避免干扰合法源 |
driftfile | 存储系统时钟频率偏差数据,重启后快速补偿 | 确保文件路径可写且权限为 600 |
rtcsync | 每 11 分钟将系统时间同步到硬件时钟 (RTC) | 双系统环境需配合 set-local-rtc 0 |
bindcmdaddress | 指定 chronyd 监听的接口(默认 0.0.0.0 全接口) | 内网服务器可绑定管理 IP |
三、服务端部署流程
1. 安装与配置
安装 Chrony
sudo dnf install -y chrony编辑配置文件
sudo vim /etc/chrony.conf添加以下内容:
server ntp.ntsc.ac.cn iburst
server ntp.aliyun.com iburst
allow 网段 限制内网访问
local stratum 10
driftfile /var/lib/chrony/drift
rtcsync
2. 防火墙配置
开放 NTP 服务端口
sudo firewall-cmd --permanent --add-service=ntp
sudo firewall-cmd --reload验证端口监听
ss -tuln | grep -E '123|323'输出应包含:udp UNCONN 0 0 0.0.0.0:123 0.0.0.0:* udp UNCONN 0 0 0.0.0.0:323 0.0.0.0:*
3. 服务管理
启动并启用服务
sudo systemctl enable --now chronyd检查服务状态
systemctl status chronyd预期输出:active (running)重载配置(无需重启)
sudo systemctl reload chronyd
四、服务端状态验证
1. 查看同步状态的
跟踪同步状态
chronyc tracking关键指标:Reference ID : 标识当前同步的服务器Stratum : 层级(越小越接近权威源)System time : 与参考源的偏移量(理想值接近 0)列出所有时间源
chronyc sources -v
相关文章:
一篇文章看懂时间同步服务
Linux 系统时间与时区管理 一、时间与时钟类型 时钟类型说明管理工具系统时钟由 Linux 内核维护的软件时钟,基于时区配置显示时间timedatectl硬件时钟 (RTC)主板上的物理时钟,通常以 UTC 或本地时间存储,用于系统启动时初始化时间hwclock …...

12.模方ModelFun工具-立面修整
摘要:本文主要介绍模方ModelFun修模工具——立面修整的操作方法。 点击工具栏即可找到立面修整工具,点击可打开并使用该工具,如下图: 图 工具菜单栏 (1)截面绘制: 快速绘制竖直矩形࿱…...
git命令常见用法【持续更新中……】
一、已有本地代码,在gitee创建了空仓库后想将代码与该仓库相连 在本地项目目录下初始化Git # 1. 初始化本地仓库 git init# 2. 添加所有文件到暂存区 git add .# 3. 提交第一个版本 git commit -m "Initial commit: 项目初始化"将本地仓库关联到Gitee 根…...

Docker 渡渡鸟镜像同步站 使用教程
Docker 渡渡鸟镜像同步站 使用教程 🚀 介绍 Docker.aityp.com(渡渡鸟镜像同步站)是一个专注于为国内开发者提供 Docker 镜像加速和同步服务的平台。它通过同步官方镜像源(如 Docker Hub、GCR、GHCR 等),为…...
Python TensorFlow库【深度学习框架】全面讲解与案例
一、TensorFlow 基础知识 1. 核心概念 张量 (Tensor): 多维数组,是 TensorFlow 的基本数据单位(标量、向量、矩阵等)。计算图 (Graph): 早期版本中的静态图机制(TF2.x 默认启用动态图)。会话 (Session): 在 TF1.x 中用于执行计算图(TF2.x 中已弃用)。2. 基本操作 impo…...

火影bug,未保证短时间数据一致性,拿这个例子讲一下Redis
本文只拿这个游戏的bug来举例Redis,如果有不妥的地方,联系我进行删除 描述:今天在高速上打火影(有隧道,有时候会卡),发现了个bug,我点了两次-1000的忍玉(大概用了1千七百…...
Power Query 是 Excel 和 Power BI 中强大的数据获取、转换和加载工具
Power Query 链接是什么 Power Query 是 Excel 和 Power BI 中强大的数据获取、转换和加载工具。Power Query 链接指的是在 Excel 或 Power BI 里通过 Power Query 建立的与外部数据源的连接。这些数据源可以是各种类型,像文本文件(CSV、TXT)…...

探索元生代:ComfyUI 工作流与计算机视觉的奇妙邂逅
目录 一、引言 二、蓝耘元生代和 ComfyUI 工作流初印象 (一)蓝耘元生代平台简介 (二)ComfyUI 工作流创建是啥玩意儿 三、计算机视觉是个啥 (一)计算机视觉的基本概念 (二)计算…...

Unity-Shader详解-其五
关于Unity的Shader部分的基础知识其实已经讲解得差不多了,今天我们来一些实例分享: 溶解 效果如下: 代码如下: Shader "Chapter8/chapter8_1" {Properties{// 定义属性[NoScaleOffset]_Albedo("Albedo", 2…...

【Java 专题补充】流程控制语句
流程控制语句是用来控制程序中各语句执行顺序的语句,是程序中既基本又非常关键的部分。流程控制语句可以把单个的语句组合成有意义的、能完成一定功能的小逻辑模块。最主要的流程控制方式是结构化程序设计中规定的三种基本流程结构。 1.1 结构化程序设计的三种基本流…...
恶心的win11更新DIY 设置win11更新为100年
打开注册表编辑器:按下Win R键,输入regedit,然后按回车打开注册表编辑器。12导航到指定路径:在注册表编辑器中,依次展开HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings新建DWORD值&…...

【ArcGIS微课1000例】0146:将多个文件夹下的影像移动到一个目标文件夹(以Landscan数据为例)
本文讲述将多个文件夹下的影像移动到一个目标文件夹,便于投影变换、裁剪等操作。 文章目录 一、数据准备二、解压操作三、批量移动四、查看效果五、ArcGIS操作一、数据准备 全球人口数据集Landscan2000-2023如下所示,每年数据位一个压缩包: 二、解压操作 首先将其解压,方…...

【redis】分片方案
Redis分片(Sharding)是解决单机性能瓶颈的核心技术,其本质是将数据分散存储到多个Redis节点(实例)中,每个实例将只是所有键的一个子集,通过水平扩展提升系统容量和性能。 分片的核心价值 性能提…...

springboot+mysql+element-plus+vue完整实现汽车租赁系统
目录 一、项目介绍 二、项目截图 1.项目结构图 三、系统详细介绍 管理后台 1.登陆页 2.管理后台主页 3.汽车地点管理 4.汽车类别 5.汽车品牌 6.汽车信息 7.用户管理 8.举报管理 9.订单管理 10.轮播图管理 11.交互界面 12.图表管理 汽车租赁商城 1.首页 2.汽…...

Linux第四节:进程控制
一、进程创建 1.1 fork函数 1. fork函数有两个返回值问题 返回的本质就是写入!所以,谁先返回,谁就先写入id,因为进程具有独立性,会发生写时拷贝,父进程和子进程各自指向return语句。 2. fork返回后&#x…...

Qt 编译 sqldrivers之psql
编译postgres pgsql驱动 下载驱动源码修改配置文件编译 下载驱动源码 // 源代码下载 https://download.qt.io/archive/qt/5.15/5.15.2/submodules/驱动目录:qtbase-everywhere-src-5.15.2\src\plugins\sqldrivers 修改配置文件 打开pro文件 右键点击添加库 此处的为debu…...
382_C++_在用户会话结束时,检查是否有其他会话仍然来自同一个客户端 IP 地址,没有连接状态设置为断开,否则为连接
之前出现的问题:重启管理机,工作机上面热备连接状态显示未连接 (此时是有一个工作机连接管理机的),所以正常应该是连接状态解决:根因分析: 重启管理机后,管理机给过来的cookie是空的,导致工作机同时存在两个管理机的session,在其中一个超时后,调用回调函数通知会话断开…...
RViz(机器人可视化工具)的配置文件(moveitcpp)
1. Panels(面板设置) 面板是RViz界面中的各个功能区域,用于显示和操作不同的数据。 Displays(显示面板) Class: rviz_common/Displays 指定面板的类型,这里是显示面板。 Help Height: 78 帮助区域的高度…...
Redis中6种缓存更新策略
Redis作为一款高性能的内存数据库,已经成为缓存层的首选解决方案。然而,使用缓存时最大的挑战在于保证缓存数据与底层数据源的一致性。缓存更新策略直接影响系统的性能、可靠性和数据一致性,选择合适的策略至关重要。 本文将介绍Redis中6种缓…...
如何使用极狐GitLab 软件包仓库功能托管 terraform?
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 Terraform 模块库 (BASIC ALL) 基础设施仓库和 Terraform 模块仓库合并到单个 Terraform 模块仓库功能引入于极狐GitLab 15.1…...

观测云:安全、可信赖的监控观测云服务
引言 近日,“TikTok 遭欧盟隐私监管机构调查并处以 5.3 亿欧元”一案,再次引发行业内对数据合规等话题的热议。据了解,仅 2023 年一年就产生了超过 20 亿美元的 GDPR 罚单。这凸显了在全球化背景下,企业在数据隐私保护方面所面临…...
【python】使用Python和BERT进行文本摘要:从数据预处理到模型训练与生成
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着信息爆炸时代的到来,海量文本数据的高效处理与理解成为亟待解决的问题。文本摘要作为自然语言处理(NLP)中的关键任务,旨在自动生成…...

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】5.3 相关性分析(PEARSON/SPEARMAN相关系数)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 5.3 相关性分析(PEARSON/SPEARMAN相关系数)5.3.1 相关性分析理论基础5.3.1.1 相关系数定义与分类5.3.1.2 Pearson相关系数( Pearson Corr…...
Redis面试 实战贴 后面持续更新链接
redis是使用C语言写的。 面试问题列表: Redis支持哪些数据类型?各适用于什么场景? Redis为什么采用单线程模型?优势与瓶颈是什么? RDB和AOF持久化的区别?如何选择?混合持久化如何实现&#x…...
小程序滚动条隐藏(uniapp版本)
单独指定页面隐藏(找到对应的scroll-view) <style> /* 全局隐藏滚动条样式 */ ::-webkit-scrollbar { display: none; width: 0; height: 0; color: transparent; background: transparent; } /* 确保scroll-view组件也隐藏滚动条 */ …...

python基础:序列和索引-->Python的特殊属性
一.序列和索引 1.1 用索引检索字符串中的元素 # 正向递增 shelloworld for i in range (0,len(s)):# i是索引print(i,s[i],end\t\t) print(\n--------------------------) # 反向递减 for i in range (-10,0):print(i,s[i],end\t\t)print(\n--------------------------) print(…...

java反射(2)
package 反射;import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Arrays;public class demo {public static void main(String[] args) throws Exception {// 通过类的全限定名获取对应的 Class 对象…...
C++核心概念全解析:从析构函数到运算符重载的深度指南
目录 前言一、构析函数1.1 概念1.2 语法格式 1.3 核心特性1.4 调用时机1.5 构造函数 vs 析构函数1.6 代码示例 二、this关键字2.1 基本概念2.2 核心特性2.3 使用场景2.3.1 区分成员与局部变量2.3.2 返回对象自身(链式调用)2.3.3 成员函数间传递当前对象2…...
如何巧妙解决 Too many connections 报错?
1. 背景 在日常的 MySQL 运维中,难免会出现参数设置不合理,导致 MySQL 在使用过程中出现各种各样的问题。 今天,我们就来讲解一下 MySQL 运维中一种常见的问题:最大连接数设置不合理,一旦到了业务高峰期就会出现连接…...

自由学习记录(58)
Why you were able to complete the SpringBoot MyBatisPlus task smoothly: Clear logic flow: Database → Entity → Service → Controller → API → JSON response. Errors are explicit, results are verifiable — you know what’s broken and what’s fixed. Sta…...