CodeGym /Adesua ahorow /Docker SELF /管理時區和時間:timedatectl 指令

管理時區和時間:timedatectl 指令

Docker SELF
等級 3 , 課堂 2
開放

管理時區和時間:timedatectl 指令

1. 在 Linux 中處理時間

為什麼設定正確的時間這麼重要?

想像一下,你試圖在系統日誌中追蹤錯誤,但日誌中的時間與實際時間對不上。或者更糟的是,你的國際企業伺服器對不同用戶顯示了不同的時間。正確設置時間不只是方便而已:這對系統運作、文件同步、安全維護(SSL 憑證依賴於時間)以及工作任務協調來說至關重要。

在 Linux 中,時間可以有兩種形式:

  1. 系統時間 (System Time) — 作業系統用於自身任務的時間。
  2. 硬體時間 (Hardware Time) — 存在於硬體層面 (BIOS/UEFI)。

我們將使用工具 timedatectl 來處理系統時間。


2. timedatectl 指令基礎

timedatectl 是一個命令工具,提供了一個方便的介面來管理時間。它允許您:

  • 檢查當前的時間和時區設定;
  • 設置系統和硬體的時間;
  • 配置時區;
  • 開啟或關閉 NTP(Network Time Protocol)的時間同步功能。

檢查當前時間

我們從最簡單的開始。要檢查當前時間和設定,執行以下命令:

timedatectl

範例輸出:

Local time: Tue 2023-10-31 12:34:56 MSK
Universal time: Tue 2023-10-31 09:34:56 UTC
RTC time: Tue 2023-10-31 09:34:56
Time zone: Europe/Moscow (MSK, +0300)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no

字段解釋:

  • Local time: 本地(系統)時間。
  • Universal time: UTC 格式的時間(協調世界時)。
  • RTC time: 硬體時間(BIOS/UEFI 層級)。
  • Time zone: 當前時區。
  • System clock synchronized: 是否通過 NTP 同步時鐘。
  • NTP service: 是否激活時間同步服務。
  • RTC in local TZ: 硬體時間是否與本地時區相符。

設置與更改時區

有時候,在搬家或專案需求變更後,可能需要更改時區。例如,您的伺服器最初設定在紐約,但現在需要服務於位於莫斯科的使用者。時區資訊可以在目錄 /usr/share/zoneinfo 中找到。

要查看可用的時區,執行下列命令:

timedatectl list-timezones

輸出的將是一個巨大的列表,例如:

Africa/Abidjan
America/New_York
Asia/Tokyo
Europe/Moscow

可以使用下面的命令來設定新的時區:

sudo timedatectl set-timezone Europe/Moscow

檢查時區是否已更改:

timedatectl

實踐任務

  1. 找出您的伺服器當前的時區。
  2. 將時區切換到 UTC
  3. 將時區切回到您的本地時區。

3. 手動設定時間

雖然現代伺服器通常通過 NTP 進行時間同步,但有時需要手動設定時間。如果伺服器處於無法訪問網路的隔離網路中,這會很有用。

首先,你可以檢查當前的系統時間:

date

可以使用以下指令設定新的時間:

sudo timedatectl set-time "YYYY-MM-DD HH:MM:SS"

例如,要將時間設定為 2023 年 11 月 1 日,12:00:

sudo timedatectl set-time "2023-11-01 12:00:00"

現在再次檢查結果:

timedatectl

設定硬體時間

硬體時間(也被稱為 RTC — Real-Time Clock)是在 BIOS/UEFI 層級管理的。如果硬體時間與系統時間不同步,可能會在重新啟動時引發問題。要進行同步,執行以下指令:

sudo hwclock --systohc

這個指令會將硬體時間設定為與系統時間一致。

如果你需要做相反的操作(將系統時間與硬體時間同步),請使用:

sudo hwclock --hctosys

4. 通過 NTP 同步時間

通過 NTP 同步時間是使用遠端伺服器自動保持準確時間的方法。在大多數現代 Linux 發行版中,NTP 默認是啟用的。

檢查 NTP 設置

執行以下操作:

timedatectl status

如果 NTP 被關閉(NTP service 行顯示 inactive),啟用它:

sudo timedatectl set-ntp true

要關閉 NTP,執行以下操作:

sudo timedatectl set-ntp false

如果 NTP 未運行,請確保相關服務處於啟用狀態。例如,在使用 systemd-timesyncd 的系統中,請確保服務是啟用的:

sudo systemctl status systemd-timesyncd

5. 實際練習

任務

  1. 把系統時區設置為 UTC
  2. 手動將系統時間設置為 2023 年 11 月 1 日,12:00:00。
  3. 啟用透過 NTP 的時間同步。

檢查

完成任務後,請確認以下內容:

  • 你的系統時間符合設置的參數。
  • 時區已更改為 UTC。
  • NTP 服務已啟用。

6. 常見錯誤與隱藏的問題

  1. "RTC in local TZ: no" 與本地時區不一致。 很多系統更喜歡使用 UTC 作為硬體時間,這樣可以避免在不同時區工作時產生混亂。這不是錯誤,而是一種偏好。

  2. 修改時間時出現訪問錯誤。 timedatectl 指令需要超級用戶的權限。確保你使用的是 sudo

  3. NTP 同步無法啟用。 檢查你的伺服器上是否有 NTP 服務在運行。例如,對於 systemd-timesyncd,執行以下指令:

    sudo systemctl start systemd-timesyncd
    

那實際上有什麼用呢?

  1. 伺服器的管理。 設置時間和時區對於日誌的正確運行、數據同步和任務計劃很重要。
  2. 與國際項目合作。 使用 UTC 作為標準能在與來自不同時區的客戶合作時避免混亂。
  3. 面試和證照考試。 關於 timedatectl 和時間管理的問題經常出現在系統管理員職位的考試和面試中。

現在你已經準備好在 Linux 中管理時間了,就像管理你的截稿日期一樣:自信、準確且毫無意外。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION