萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 系統時鐘同步完整指南:date、hwclock、ntpdate 與定時校時實作

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

時鐘同步示意圖

基本指令速查

操作指令範例
查看系統時間datedate
設定系統時間date --setdate --set "2024-07-07 10:19:00"
查看硬體時間hwclock --show / clock --showhwclock --show
設定硬體時間hwclock --set --date / clock --set --datehwclock --set --date="2024-07-07 10:19:00"
硬體 → 系統hwclock --hctosys / clock --hctosyshwclock --hctosys
系統 → 硬體hwclock --systohc / clock --systohchwclock --systohc

clock 為舊指令,支援 Alpha 架構,現代 x86 系統建議統一使用 hwclock。

同步邏輯圖解

開機:BIOS (RTC) → 讀取 → 系統時鐘
運行:系統時鐘 獨立運作
關機/同步:系統時鐘 → 寫入 → RTC (hwclock --systohc)
手動同步:RTC → 系統 (hwclock --hctosys) 或 系統 → RTC

與外部 NTP 伺服器同步

單次同步

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

常用台灣/中國大陸 NTP 伺服器

  • time.stdtime.gov.tw (國家標準時間中心)
  • ntp.sjtu.edu.cn (上海交通大學)
  • cn.pool.ntp.org / asia.pool.ntp.org
  • time.google.com / time.cloudflare.com (支援 NTPv4)

定時自動校時 (crontab)

crontab -e
# 每小時第 5 分同步一次
5 * * * * /usr/sbin/ntpdate ntp.sjtu.edu.cn > /dev/null 2>&1
# 每天 17:05 將系統時間寫入 RTC
5 17 * * * /sbin/hwclock --systohc

systemd-timesyncd 現代替代方案 (systemd 系統)

# /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 自動化,可確保叢集節點時間一致性,避免分散式系統因時間偏移產生難以除錯的故障。

copyright © 萬盛學電腦網 all rights reserved