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 趨勢