当前位置: 首页 > news >正文

Linux 时间同步的流程

一、问题时间

RTC时间、系统时间(UTC)和本地时间的关系如下:

  1. RTC时间‌(硬件时钟):

    • 显示为UTC时间格式:02:50:35/02:51:28
    • 由主板电池供电,独立于系统运行‌12
    • 通常存储UTC时间(Linux默认配置)‌45
  2. 系统时间‌:

    • Universal time(UTC时间):02:50:33/02:51:20
    • Local time(本地时间):10:50:33/10:51:20(UTC+8时区转换结果)‌56
    • 系统启动时从RTC读取UTC时间初始化,之后由内核维护‌17
  3. 时间偏差分析‌:

    • 实际时间16:51与本地时间10:51相差6小时
    • 可能原因:
      • RTC被错误设置为本地时间而非UTC(但timedatectl显示"RTC in local TZ: no"排除了这种情况)‌68
      • NTP同步未生效(显示"NTP synchronized: no")‌910
      • 硬件时钟电池供电异常导致RTC时间漂移‌211
真实时间 (16:51 CST)  ├─ 应映射为→ UTC时间 (08:51)     │      ├─ RTC应存储为→ 08:51 (UTC)    │      └─ 系统UTC时间应显示为→ 08:51             │             └─ 时区转换后→ 16:51 CST  └─ 当前异常状态:RTC存储为→ 02:51 (UTC)系统UTC时间→ 02:51时区转换后→ 10:51 CST

二、systemd-timesyncd 轻量级方案

📌 适用场景:桌面环境/轻负载服务器,精度需求 ±100ms 以内‌13

# 1. 安装与验证
sudo apt install systemd-timesyncd   # Debian/Ubuntu
sudo yum install systemd-timesyncd   # CentOS/RHEL‌:ml-citation{ref="5,9" data="citationList"}
timedatectl status                   # 检查服务状态

# 2. 配置核心参数(/etc/systemd/timesyncd.conf
[Time]
NTP=ntp.aliyun.com ntp.tencent.com  
# 首选NTP服务器
FallbackNTP=ntp.ubuntu.com           # 备用服务器
RootDistanceMaxSec=5                 # 最大允许时间偏差
PollIntervalMinSec=32                # 最小轮询间隔‌:ml-citation{ref="4,6" data="citationList"}

# 3. 生效配置
sudo systemctl daemon-reload           # 重载配置
sudo systemctl restart systemd-timesyncd
sudo systemctl
enable systemd-timesyncd # 设置开机自启‌:ml-citation{ref="7" data="citationList"}

# 4. 验证同步状态
timedatectl | grep "synchronized"      # 显示 yes 即成功
journalctl -u systemd-timesyncd -f     # 实时查看同步日志‌:ml-citation{ref="6,9" data="citationList"}

三、chronyd 高精度方案

📌 适用场景:虚拟机/集群环境/不稳定网络,精度需求 ±1ms‌110

# 1. 安装与启动
sudo yum install chrony        # CentOS/RHEL
sudo apt install chrony        # Debian/Ubuntu
sudo systemctl enable --now chronyd‌:ml-citation

# 2. 优化配置(/etc/chrony.conf
server ntp.aliyun.com iburst   # iburst 加速初始同步
server cn.pool.ntp.org iburst
driftfile /var/lib/chrony/drift
# 时钟漂移记录
makestep 1.0 3                 # 偏差>1秒时强制步进调整
allow 192.168.0.0/24           # 授权内网同步(服务端需启用)‌:ml-citation{ref="8,10" data="citationList"}

# 3. 防火墙放行
sudo firewall-cmd --add-service=ntp --permanent
sudo firewall-cmd --reload‌:ml-citation

# 4. 管理指令
chronyc tracking               # 查看时间偏差(关注 Last offset
chronyc sources -v             # 检查NTP源质量
chronyc makestep               # 强制立即同步‌:ml-citation

四、相关操作实例

[root@localhost tmp]# systemctl status chronyd ntp
● chronyd.service - NTP client/serverLoaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)Active: active (running) since Mon 2025-07-21 16:13:14 CST; 2 days agoDocs: man:chronyd(8)man:chrony.conf(5)  Process: 669 ExecStartPost=/usr/libexec/chrony-helper update-daemon (code=exited, status=0/SUCCESS)Process: 576 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS)Main PID: 598 (chronyd)Tasks: 1Memory: 1.1MCGroup: /system.slice/chronyd.service└─598 /usr/sbin/chronyd
[root@localhost tmp]# systemctl restart chronyd
[root@localhost tmp]# systemctl status chronyd ntp
● chronyd.service - NTP client/serverLoaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)Active: active (running) since Thu 2025-07-24 11:01:22 CST; 5s agoDocs: man:chronyd(8)man:chrony.conf(5)Process: 5159 ExecStartPost=/usr/libexec/chrony-helper update-daemon (code=exited, status=0/SUCCESS)Process: 5156 ExecStart=/usr/sbin/chronyd $OPTIONS (code=exited, status=0/SUCCESS)Main PID: 5158 (chronyd)Tasks: 1Memory: 436.0KCGroup: /system.slice/chronyd.service└─5158 /usr/sbin/chronyd
Jul 24 11:01:22 localhost.localdomain systemd[1]: Stopped NTP client/server.
Jul 24 11:01:22 localhost.localdomain systemd[1]: Starting NTP client/server...
Jul 24 11:01:22 localhost.localdomain chronyd[5158]: chronyd version 3.4 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYN... +DEBUG)
Jul 24 11:01:22 localhost.localdomain chronyd[5158]: Frequency -222219.096 +/- 109.213 ppm read from /var/lib/chrony/drift
Jul 24 11:01:22 localhost.localdomain systemd[1]: Started NTP client/server.
Unit ntp.service could not be found.
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost tmp]# timedatectl statusLocal time: Thu 2025-07-24 17:01:42 CSTUniversal time: Thu 2025-07-24 09:01:42 UTCRTC time: Thu 2025-07-24 09:01:41Time zone: Asia/Shanghai (CST, +0800)NTP enabled: yes
NTP synchronized: yesRTC in local TZ: noDST active: n/a
[root@localhost tmp]# chronyc tracking
Reference ID    : D21C8204 (time.nju.edu.cn)
Stratum         : 2
Ref time (UTC)  : Thu Jul 24 09:01:26 2025
System time     : 3.836876392 seconds slow of NTP time
Last offset     : +0.561115086 seconds
RMS offset      : 0.561115086 seconds
Frequency       : 222219.094 ppm slow
Residual freq   : +181675.438 ppm
Skew            : 109.213 ppm
Root delay      : 0.041683048 seconds
Root dispersion : 8.131237984 seconds
Update interval : 3.1 seconds
Leap status     : Normal

五、方案对比与选型指南

‌特性‌

systemd-timesyncd

chronyd

‌精度‌

±100ms

±1ms

‌资源占用‌

极低(轻量级守护进程)

中等(需常驻内存)‌1

‌配置文件‌

/etc/systemd/timesyncd.conf

/etc/chrony.conf

‌适用场景‌

日常办公终端

K8s集群/数据库服务器‌12

‌网络适应性‌

依赖稳定网络

支持断网续同步‌110

‌关键命令‌

timedatectl status

chronyc tracking

⚠️ ‌关键注意‌

  1. 二者禁止同时启用,会冲突导致同步失败‌3
  2. 若硬件时钟电池老化,需更换后重新配置‌5
  3. 企业级集群建议部署专用NTP服务器‌1415

此手册覆盖主流场景的完整配置流程,systemd-timesyncd 满足基础需求,chronyd 则为高精度/复杂环境首选方案。

http://www.lryc.cn/news/599199.html

相关文章:

  • 小程序卡顿到丝滑体验:ZKmall开源商城性能优化与兼容修复实战指南
  • 教培机构如何开发自己的证件照拍照采集小程序
  • 【pybind11】 pybind11如何调用python
  • 《整合Spring Cache:本地缓存、Redis与Caffeine对比实践》
  • Python 数据可视化之 Matplotlib 库
  • 【国内电子数据取证厂商龙信科技】谁是躲在“向日葵”后的
  • OSPF之多区域
  • 【ResNet50图像分类部署至RK3588】模型训练→转换RKNN→开发板部署
  • Jmeter的元件使用介绍:(四)前置处理器详解
  • JMeter每次压测前清除全部以确保异常率准确(以黑马点评为例、详细图解)
  • Pytorch中register_buffer和torch.nn.Parameter的异同
  • npm init vite-app runoob-vue3-test2 ,npm init vue@latest,指令区别
  • LIMA:大语言模型对齐的“少即是多”革命——原理、实验与范式重构
  • VR 技术在污水处理领域的创新性应用探索​
  • 华为云DRS实现Oracle到GaussDB数据库迁移的全流程技术方案
  • GTSuite许可与网络安全
  • Android Studio 自带的官方模拟器,ABI这一列是x86_64,xABI这一列是arm64-v8a
  • Apache Ranger 权限管理
  • Android Studio 2024 内嵌 Unity 3D 开发示例
  • Android studio自带的Android模拟器都是x86架构的吗,需要把arm架构的app翻译成x86指令?
  • Oracle数据块8KB、OS默认认块管理4KB,是否需调整大小为一致?
  • 弹性网:基于神经网络的多组分磁共振弹性成像波反演与不确定性量化|文献速递-医学影像算法文献分享
  • LeetCode 127:单词接龙
  • Hive-vscode-snippets
  • Hive【Hive架构及工作原理】
  • Oracle MCP本地部署测试
  • js实现宫格布局图片放大交互动画
  • [python][flask]flask接受get或者post参数
  • 【调试Bug】网络在训练中输出NaN
  • 关于网络模型