Orange的运维学习日记–16. Linux时间管理
文章目录
- Orange的运维学习日记--16. Linux时间管理
- 系统与硬件时钟
- 时钟类型对比
- 查看内核支持的时钟源
- 本地时间调整
- 使用 `date` 查看与设置
- 一次性同步:`ntpdate`
- 同步到硬件时钟:`hwclock`
- 基于 systemd 的 `timedatectl`
- 交互式选择时区:`tzselect`
- NTP 服务对比
- 自动对时配置
- Windows 平台对时
- macOS 平台对时
- Linux 上的 `chronyd` 服务
- 时间服务器部署
- 部署拓扑示例(ASCII 图示)
- 服务端配置
- 客户端配置
- 常见故障排查
- 时间监控与报警
系统与硬件时钟
系统时间由 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 平台对时
- 打开“控制面板 → 日期和时间”
- 切换到“Internet 时间”选项卡
- 勾选“与 Internet 时间服务器同步”,填写常用 NTP 地址(如
time.windows.com
) - 点击“立即更新”并应用
macOS 平台对时
- 打开“系统设置 → 日期与时间”
- 勾选“自动设置日期和时间”
- 选择或添加喜欢的 Apple NTP 服务器
Linux 上的 chronyd
服务
-
安装 chrony(以 Red Hat 系发行版为例)
yum install chrony
-
编辑
/etc/chrony.conf
,添加或调整对时服务器
server ntp.aliyun.com iburst pool 2.rocky.pool.ntp.org iburst
-
启用并启动服务
systemctl enable --now chronyd
-
查看对时源状态
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/24systemctl restart chronyd
客户端配置
vim /etc/chrony.conf# 指向局域网内部时间服务器
server 10.1.8.10 iburstsystemctl 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 趋势