Orange的运维学习日记--16.Linux时间管理

发布于:2025-07-31 ⋅ 阅读:(17) ⋅ 点赞:(0)

Orange的运维学习日记–16. Linux时间管理

系统与硬件时钟

系统时间由 Linux 内核维护,常见时钟源(clocksource)包括 TSC、HPET、ACPI PM Timer 等。
硬件时钟(RTC)通过主板电池供电,系统关机后依然运行,用于引导时提供初始时间。

时钟类型对比

时钟名称 作用 是否可调 用途
CLOCK_REALTIME 墙钟时间,可被用户/管理员修改 可调节 date、文件系统时间戳、网络协议
CLOCK_MONOTONIC 单调递增时间,不受系统时钟修改影响 不可调节 性能分析、测量时间间隔
CLOCK_BOOTTIME 含睡眠时间的单调时钟 不可调节 包括挂起/休眠时间的精准事件计时

查看内核支持的时钟源

cat /sys/devices/system/clocksource/clocksource0/available_clocksource
cat /sys/devices/system/clocksource/clocksource0/current_clocksource

本地时间调整

使用 date 查看与设置

# 查看人类可读格式(英文环境避免本地化乱码)
LANG=en_US.UTF-8 date

# 查看 Epoch 秒
date +%s

# 设置系统时间
date -s '2022-11-11 11:30:59'

提示:date 的字符串解析对本地化依赖较大,推荐使用 YYYY-MM-DD hh:mm:ss 这种标准格式。

一次性同步:ntpdate

# 安装(以 Debian/Ubuntu 为例)
apt-get install ntpdate

# 立即与公有 NTP 服务器同步
ntpdate -u time.google.com

同步到硬件时钟:hwclock

# 读取 RTC 时间
hwclock -r

# 将系统时间写入 RTC(持久)
hwclock -w

# 将 RTC 时间写入系统
hwclock -s
  • hwclock -w 建议在人工设置完系统时间后执行,确保下次启动也能读取到准确时间。

基于 systemd 的 timedatectl

# 显示本地时间、UTC、RTC、NTP 状态及时区
timedatectl

# 关闭/开启 NTP 自动对时
timedatectl set-ntp no
timedatectl set-ntp yes

# 手动设置系统时间
timedatectl set-time '2022-11-10 11:42:54'

# 设置或切换时区
timedatectl set-timezone Asia/Shanghai

提示:如果 NTP 自动对时开启,手动设置时间会被立即覆盖。


交互式选择时区:tzselect

tzselect

按提示选择大区、国家和城市,得到类似 Asia/Urumqi 的 TZ 值。
可将该值赋给环境变量:

echo 'export TZ=Asia/Urumqi' >> ~/.profile
source ~/.profile

NTP 服务对比

特性 ntpd chronyd systemd-timesyncd
资源占用 较高 适中 最低
适应网络抖动 较差 较好 较差
虚拟化/移动设备 支持较弱 支持良好 支持有限
功能丰富度 丰富 丰富 基本

选择时可根据业务需求、环境网络质量及资源消耗进行权衡。


自动对时配置

Windows 平台对时

  1. 打开“控制面板 → 日期和时间”
  2. 切换到“Internet 时间”选项卡
  3. 勾选“与 Internet 时间服务器同步”,填写常用 NTP 地址(如 time.windows.com
  4. 点击“立即更新”并应用

在这里插入图片描述

macOS 平台对时

  1. 打开“系统设置 → 日期与时间”
  2. 勾选“自动设置日期和时间”
  3. 选择或添加喜欢的 Apple NTP 服务器

Linux 上的 chronyd 服务

  1. 安装 chrony(以 Red Hat 系发行版为例)

    yum install chrony
    
  2. 编辑

    /etc/chrony.conf
    

    ,添加或调整对时服务器

    server ntp.aliyun.com iburst
    pool 2.rocky.pool.ntp.org iburst
    
  3. 启用并启动服务

    systemctl enable --now chronyd
    
  4. 查看对时源状态

    chronyc sources -v
    chronyc tracking
    

输出示例:

^* 203.107.6.88   2   6    77     9  -1.84ms ±  23ms
  • 前缀含义:^* 最佳源;Reach、Offset、StdDev 用于评估稳定性。

时间服务器部署

部署拓扑示例(ASCII 图示)

Internet NTP Pool
       ↓
   ┌───┴────┐
   │  Chrony │  局域网时间服务器(10.1.8.10)
   └───┬────┘
       ↓
┌──────┴───────┐
│  客户端群组   │  (10.1.8.0/24)
└──────────────┘

服务端配置

vim /etc/chrony.conf

# 监听本地接口
bindaddress 10.1.8.10

# 开放子网范围
allow 10.1.8.0/24

systemctl restart chronyd

客户端配置

vim /etc/chrony.conf

# 指向局域网内部时间服务器
server 10.1.8.10 iburst

systemctl restart chronyd

配置防火墙,确保 UDP/123 端口双向连通。


常见故障排查

  • chrony 无法同步
    • 检查时间服务器地址是否正确
    • 查看 journalctl -u chronyd 日志
    • 确认防火墙、SELinux 策略放行 UDP/123
  • 系统时间持续漂移
    • 查看硬件时钟电池电量及 /etc/adjtime 是否存在写入错误
    • 使用 chronyc tracking 查看 Root Delay、Root Dispersion 是否超阈值
  • 时区切换后时间不生效
    • 确认 /etc/localtime 已链接到正确的 zoneinfo 文件
    • 重启相关服务或重新登录

时间监控与报警

  • ntpstat:快速报告同步状态
  • chronyc sourcestats:统计每个源的历史偏差
  • 将关键指标(Offset、Drift)接入 Prometheus + Grafana,设置阈值报警
  • 定期对硬件时钟和系统时间做交叉检查,钉住 drift 趋势

网站公告

今日签到

点亮在社区的每一天
去签到