Linux 擁有兩種時鐘:系統時鐘 (Kernel 維護) 與 硬體時鐘 (RTC) (主板電池供電)。兩者不同步會導致日誌時間錯亂、定時任務異常、SSL 憑證驗證失敗等問題。本文詳細說明 date、hwclock/clock、ntpdate 指令操作、雙向同步邏輯與定時校時設定。

| 操作 | 指令 | 範例 |
|---|---|---|
| 查看系統時間 | date | date |
| 設定系統時間 | date --set | date --set "2024-07-07 10:19:00" |
| 查看硬體時間 | hwclock --show / clock --show | hwclock --show |
| 設定硬體時間 | hwclock --set --date / clock --set --date | hwclock --set --date="2024-07-07 10:19:00" |
| 硬體 → 系統 | hwclock --hctosys / clock --hctosys | hwclock --hctosys |
| 系統 → 硬體 | hwclock --systohc / clock --systohc | hwclock --systohc |
clock 為舊指令,支援 Alpha 架構,現代 x86 系統建議統一使用 hwclock。
開機:BIOS (RTC) → 讀取 → 系統時鐘
運行:系統時鐘 獨立運作
關機/同步:系統時鐘 → 寫入 → RTC (hwclock --systohc)
手動同步:RTC → 系統 (hwclock --hctosys) 或 系統 → RTC
service ntpd stop # 必須先停止 ntpd 釋放 UDP 123
ntpdate ntp.sjtu.edu.cn # 或 time.windows.com, pool.ntp.org
service ntpd start
chkconfig ntpd on
hwclock --systohc # 將同步後的系統時間寫入 RTC
crontab -e
# 每小時第 5 分同步一次
5 * * * * /usr/sbin/ntpdate ntp.sjtu.edu.cn > /dev/null 2>&1
# 每天 17:05 將系統時間寫入 RTC
5 17 * * * /sbin/hwclock --systohc
# /etc/systemd/timesyncd.conf
[Time]
NTP=time.stdtime.gov.tw ntp.sjtu.edu.cn
FallbackNTP=pool.ntp.org
# 啟用
systemctl enable --now systemd-timesyncd
# 狀態查詢
timedatectl status
ntpdate: the NTP socket is in use → 未停止 ntpd 或 systemd-timesyncd。no server suitable for synchronization found → 防火牆阻擋 UDP 123、伺服器不可達、時間差過大 (>1000s)。vmware-tools/qemu-guest-agent 並啟用宿主機時間同步。建立「NTP 同步系統時間 → hwclock --systohc 寫入 RTC」的標準化流程,並透過 crontab 或 systemd-timesyncd 自動化,可確保叢集節點時間一致性,避免分散式系統因時間偏移產生難以除錯的故障。