Linux的时间同步服务器(附加详细实验案例)

一、计时方式的发展

1.古代计时方式​

  • 公元前约 2000 年:古埃及人利用光线留下的影子计时,他们修建高耸的大型方尖碑,通过追踪方尖碑影子的移动判断时间,这是早期利用自然现象计时的典型方式 。​
  • 商朝时期:人们开发并使用泄水型水钟 —— 漏壶。通过水从壶中缓慢流出,依据水位下降的刻度来记录时间,开启了利用流体计时的新阶段。​
  • 北宋元祐元年(1086 年):天文学家苏颂将浑仪、浑象和报时装置结合,建造出 “水运仪象台”。它不仅能观测天象,还能准确计时与报时,是古代机械计时技术的集大成者。​
  • 14 世纪:机械钟在西方国家广泛使用,推动计时工具向机械化发展。​
  • 16世纪:奥斯曼帝国的科学家达兹・艾 - 丁(Taqi al - Din)发明机械闹钟,为计时工具增添新功能。​
  • 1583 年:伽利略提出著名的等时性理论,指出不论摆动幅度大小,摆完成一次摆动的时间相同,为钟表计时精度提升奠定理论基础。​
  • 1656 年:荷兰科学家克里斯蒂安・惠更斯(Christiaan Huygens)应用伽利略的理论,设计出世界第一只钟摆,大幅提升了机械钟表的计时精度。​
  • 1868 年:百达翡丽(Patek Philippe)发明手表,使计时工具更加便于携带,适应人们日常使用需求。​

2.现代计时方式​

  • 1967 年:瑞士发布世界上首款石英表。石英晶体在电池电力作用下产生规律振动(每秒振动 32768 次),通过电路计算振动次数确定时间,石英钟表因精准、成本低迅速普及。​
  • 拉比提出原子钟构想后逐步发展 :拉比依据原子从高 “能量态” 迁至低 “能量态” 时释放电磁波并产生共振频率的原理,构想出原子钟(Atomic clock )。如今,铯原子(Caesium133)钟被很多国家(包括我国和美国 NIST)的标准局用作时间精度标准,GPS 系统也依赖其精确计时。​
  • 2008 年:锶(Strontium87)原子钟诞生,固有频率约合 430 万亿赫兹,将精度提升到 10 的 17 次方。​
  • 2013 年:由镱元素(ytterbium)制成的原子钟问世,固有频率约合 518 万亿赫兹,精度高达 10 的 18 次方,若从 138 亿年前宇宙诞生时开始计时,至今误差不超过 1 秒。此外,网络时间授时服务出现,用户可借此获取统一、标准的时间信号,极大简化时间同步过程。

二、时间同步服务

多主机协作工作时,各个主机的时间同步很重要,时间不一致会造成很多重要应用的故障,如:加密协议,日志,集群等,利用NTP(Network Time Protocol )协议使网络中的各个计算机时间达到同步。目前NTP协议属于运维基础架构中必备的基本服务之一。

Linux 时间同步服务的工具主要有 NTP 和 Chrony :

  • ntp:将系统时钟和世界协调时 UTC 同步。局域网内,其精度可达 0.1ms,可满足企业关键业务系统等对时间精度要求高的场景。互联网上绝大多数地方,精度课达到 1 - 50ms,能满足普通网站服务器等应用的时间同步需求。ntp 项目官网是 http://www.ntp.org,在官网可获取软件、文档和社区支持等资源。
  • chrony:作为实现 NTP 协议的自由软件,功能强大灵活。不仅能与 NTP 服务器同步,还支持 GPS 接收器等参考时钟,也可手动输入时间。chrony 能作为 NTPv4 服务器和对等体,为网络计算机提供时间服务。它适应多种复杂环境,在间歇性、拥挤网络,以及系统运行不连续或虚拟机场景下都能稳定工作。通过 Internet 同步时精度在几毫秒内,LAN 环境下精度为几十微秒,借助硬件时间戳或参考时钟可实现亚微秒级精度,常用于金融交易系统、航空航天控制等对时间精度要求极高的领域。

 三、时间同步服务的使用

1.系统时间及时区管理 

timedatectl 命令总结:

timedatectl查看系统时间
timedatectl set-time "2026-11-11 11:11:11"
设定系统时间
timedatectl list-timezones
显示系统的所有时区
timedatectl set-timezone "Asia/Shanghai"
设定系统时区
timedatectl set-local-rtc 0|1
设定系统时间计算方式
(0表示 utc 时间计算方式,1表示 cst 时间计算方式)

timedatectl查看系统时间 

Local time当前系统时间
Universal time伦敦时间
RTC time硬件时间
Time zone时区
System clock synchronized系统时间同步开启
NTP serviceNTP 协议开启
RTC in local TZ硬件时间是否使用本地时间

修改时间需要关掉 chronyd.service, NTP service 从 active 变为 inactive。

timedatectl set-time "2026-11-11 11:11:11"设定系统时间为 2026-11-11 11:11:11 

timedatectl list-timezones列出系统中所有可用的时区 

timedatectl set-timezone "Asia/Amman"将时区改为 Asia/Amman ,位于东三区(+0300),后面再改回 Asia/Shanghai。

timedatectl set-local-rtc 1RTC time 使用 Local time,(硬件时间同步本地时间),警告提示:跨区进行数据传输时会出现问题

timedatectl set-local-rtc 0RTC time 使用 Universal time(硬件时间同步伦敦时间)

2.客户端使用公共 ntp 地址同步网络时间

pool:指定时间源为 ntp.ntsc.ac.cn

iburst:当服务重启时,立即向 ntp.ntsc.ac.cn 主机发送同步时间的请求(选项当服务器可达时,发送一个八个数据包而不是通常的一个数据包,包间隔通常为2秒,可加快初始同步速度)

chronyc sources –v显示时间同步信息,图中可知时间与 114.118.7.163 主机的时间同步

*表示同步当前最优主机时间                         ?表示不可达 

  • M:时间源模式 ^表示服务器,=表示对等方,表示本地连接的参考时钟
  • S:指源的状态

          *    表示 chronyd 当前已经同步到的源。

          +   表示可接受的信号源,与选定的信号源组合在一起。

          -    表示被合并算法排除的可接受源

          ?   指已失去连接性或者其数据包未通过所有测试的源。

          x   表示chronyd认为时虚假行情的时钟,即标记该时间与其他多数时间不一致

           表示时间似乎具有太多可变性

  • Name/IP address:显示源的名称或IP地址
  • Stratum:显示时间来源的层
  • Poll:显示轮询源的速率
  • Reach:显示源的可达性寄存器以八进制数字打印
  • LastRx:显示多长时间前从来源接收到了最后一个好的样本
  • Last sample:此列显示上次测量时本地时钟与源之间的偏移

3.时间同步服务器的搭建

两台主机,192.168.10.200 作为服务器,增加 192.168.10.20 作为客户端,目的使客户端(192.168.10.20)同步服务器(192.168.10.200)的时间。以下是客户端主机的配置:

1)服务器(192.168.10.200)的命令配置

allow 0.0.0.0/0:允许所有人看服务器的时间,0表示没有,也表示全部

local stratum 10:设定时间层为第10层,即使 server 指令中时间服务器不可用,也允许将本地时间作为标准时间授时给其它客户端

重启服务器中的时间同步服务,并查看时间同步情况

netstat -antlupe | prep chronyd检测系统当中的端口(开了哪些端口)

-antlupe 的解释说明:

a:显示所有连接和监听端口

n:解析,以数字形式显示地址和端口号

t:显示 TCP 连接和监听端口。

l:显示处于监听状态的套接字

u:显示 UDP 连接和监听端口

p:显示进程的 PID(进程 ID)和名称

e:显示扩展信息

在服务器端还需关闭火墙,才能同步时间。 

2)客户端(192.168.10.20)测试同步服务器时间

先修改客户端的时间,便于观察后续是否同步服务器时间。date 命令只能改系统时间,不能改硬件时间(RTC time)。

date 命令解释:

11   11   11   11   2026 . 11

月   日   时   分     年      秒

然后指定 ip 为服务器的 ip(192.168.10.200) 

重启 chronyd 服务,然后查看可知已同步 192.168.10.200 的时间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/78639.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【无需docker】mac本地部署dify

环境安装准备 #安装 postgresql13 brew install postgresql13 #使用zsh的在全局添加postgresql命令集 echo export PATH"/usr/local/opt/postgresql13/bin:$PATH" >> ~/.zshrc # 使得zsh的配置修改生效 source ~/.zshrc # 启动postgresql brew services star…

(5)概述 QT 的元对象系统里的类的调用与联系,及访问接口

(1) QT 的元对象系统,这几个字大家都知道,那么 QT 的元对象系统里都包含哪些内容呢,其访问接口是如何呢? 从 QObject 类的实现里,从其数据成员里就可以看出来: QT 里父容器可以释放其…

打包 Python 项目为 Windows 可执行文件:高效部署指南

Hypackpy 是一款由白月黑羽开发的 Python 项目打包工具,它与 PyInstaller 等传统工具不同,通过直接打包解释器环境和项目代码,并允许开发者修改配置文件以排除不需要的内容,从而创建方便用户一键运行的可执行程序。以下是使用 Hyp…

MySQL JOIN详解:掌握数据关联的核心技能

一、为什么需要JOIN? 在关系型数据库中,数据通常被拆分到不同的表中以提高存储效率。当我们需要从多个表中组合数据时,JOIN操作就成为了最关键的技能。通过本文,您将全面掌握MySQL中7种JOIN操作,并学会如何在实际场景中…

Kdump 收集器及使用方式

以下是 Linux 系统中 Kdump 转储收集器的详细说明及其使用方法,涵盖核心工具、配置方法及实际示例: 一、Kdump 收集器分类及作用 Kdump 的核心功能是通过 捕获内核 生成内存转储文件(vmcore),其核心收集器包括&#…

Error: error:0308010C:digital envelope routines::unsupported 高版本node启动低版本项目运行报错

我的问题就是高版本node启动旧版本项目引起的问题,单独在配置 package.json文件中配置并运行就可以,大概意思就是设置node的openssl "scripts": {"dev": "SET NODE_OPTIONS--openssl-legacy-provider && vue-cli-servi…

松下机器人快速入门指南(2025年更新版)

松下机器人快速入门指南(2025年更新版) 松下机器人以其高精度、稳定性和易用性在工业自动化领域广泛应用。本文将从硬件配置、参数设置、手动操作、编程基础到维护保养,全面讲解松下机器人的快速入门方法,帮助新手快速掌握核心操…

【CISCO】Se2/0, Se3/0:串行口(Serial) 这里串口的2/0 和 3/0分别都是什么?

在 Cisco IOS 设备上&#xff0c;接口名称通常遵循这样一个格式&#xff1a; <类型><槽号>/<端口号>类型&#xff08;Type&#xff09;&#xff1a;表示接口的物理或逻辑类型&#xff0c;比如 Serial&#xff08;串行&#xff09;、FastEthernet、GigabitEt…

开源无人机地面站QGroundControl安卓界面美化与逻辑优化实战

QGroundControl作为开源无人机地面站软件,其安卓客户端界面美化与逻辑优化是提升用户体验的重要工程。 通过Qt框架的界面重构和代码逻辑优化,可以实现视觉升级与性能提升的双重目标。本文将系统讲解QGC安卓客户端的二次开发全流程,包括开发环境搭建、界面视觉升级、多分辨率…

基于DDPG的自动驾驶小车绕圈任务

1.任务介绍 任务来源: DQN: Deep Q Learning &#xff5c;自动驾驶入门&#xff08;&#xff1f;&#xff09; &#xff5c;算法与实现 任务原始代码: self-driving car 在上一篇使用了DQN算法完成自动驾驶小车绕圈任务之后&#xff0c;学习了DDPG算法&#xf…

缓存置换:用c++实现最近最少使用(LRU)算法

在计算机的世界里&#xff0c;缓存就像一个“快速仓库”&#xff0c;它存储着我们频繁访问的数据&#xff0c;大大提升了数据的读取速度。但这个 “仓库” 空间有限&#xff0c;当它被装满时&#xff0c;就得决定舍弃一些数据&#xff0c;为新数据腾出位置&#xff0c;这个决策…

【YOLO11改进】改进Conv、颈部网络STFEN、以及引入PIOU用于小目标检测!

改进后的整体网络架构 改进一:RFD模块(Conv) YOLOv11模型的跨步卷积下采样虽然快速聚合了局部特征,并且实现了较高的计算效率,但其固有的信息压缩机制会导致细粒度特征的不可逆丢失。针对特征保留与计算效率的平衡问题,本文采用RFD模块替换跨步卷积下采样模块。RFD模块通…

设计模式每日硬核训练 Day 18:备忘录模式(Memento Pattern)完整讲解与实战应用

&#x1f504; 回顾 Day 17&#xff1a;中介者模式小结 在 Day 17 中&#xff0c;我们学习了中介者模式&#xff08;Mediator Pattern&#xff09;&#xff1a; 用一个中介者集中管理对象之间的通信。降低对象之间的耦合&#xff0c;适用于聊天系统、GUI 控件联动、塔台调度等…

java单元测试代码

import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import java.util.List;public class UserServiceTest {Testpublic void testSearchUserByTags() {// 模拟标签列表List<String> tagNameList List.of("tag1", "…

前端面经-VUE3篇(一)--vue3基础知识- 插值表达式、ref、reactive

目录 一、 插值表达式 1、插值表达式 ({{}}) 的本质与作用&#xff1a; 2、与 Vue 响应式系统关系&#xff1a; 二、指令 1、什么是 Vue 指令&#xff1f; 2、指令的分类 1、内置指令 ① 内容绑定&#xff1a;v-text 和 v-html ② 属性绑定&#xff1a;v-bind ③ 事件绑定…

矩阵置零(中等)

可以用两个标记数组分别记录每一行和每一列是否有零出现。 首先遍历该数组一次&#xff0c;如果某个元素为 0&#xff0c;那么就将该元素所在的行和列所对应标记数组的位置置为 true。然后再次遍历该数组&#xff0c;用标记数组更新原数组。 class Solution {public void set…

Android 实现一个隐私弹窗

效果图如下&#xff1a; 1. 设置同意、退出、点击用户协议、点击隐私协议的函数参数 2. 《用户协议》、《隐私政策》设置成可点击的&#xff0c;且颜色要区分出来 res/layout/dialog_privacy_policy.xml 文件 <?xml version"1.0" encoding"utf-8"?&…

TCP概念+模拟tcp服务器及客户端

目录 一、TCP基本概念 二、ser服务器代码 三、cil客户端代码 四、面试常问问题 4.1 TCP的可靠性怎么保证或怎么实现? 4.2 具体说一下滑动窗口 一、TCP基本概念 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可…

Cocos Creator 自动图集资源 (Auto Atlas)使用注意事项

1、游戏打包时&#xff0c;自动图集设置选项中&#xff0c;默认会删除无关联的图片 2、自动图集设置中&#xff0c;就算勾除(Remove unused ImageAsset from the Bundle)的功能&#xff0c;无关联的图片也不会打包进入图集之中&#xff0c;会独立存在打包的游戏中。 3、使用自动…

PyTorch 2.0编译器技术深度解析:如何自动生成高性能CUDA代码

引言&#xff1a;编译革命的范式转移 PyTorch 2.0的torch.compile不仅是简单的即时编译器&#xff08;JIT&#xff09;&#xff0c;更标志着深度学习框架从‌解释执行‌到‌编译优化‌的范式跃迁。本文通过逆向工程编译过程&#xff0c;揭示PyTorch如何将动态图转换为高性能CU…