timedatectl:Linux 伺服器時間同步狀態確認與時區設定

測試環境RHEL 系列AlmaLinux 9.8systemd 252 · chrony 4.8root 帳號Debian 12 一般帳號2026-10-29 確認
系統資訊 · 設定指令timedatectl位置/usr/bin/timedatectl

timedatectl 是用來查看和變更 Linux 伺服器系統時鐘、時區以及 NTP 時間同步狀態的 systemd 指令。在使用 chrony 的 AlmaLinux 9 伺服器和使用 ntpsec 的 Debian 12 伺服器上確認時間同步狀態後,兩台伺服器的時鐘都是準的,但 NTP service 那一行一台顯示 active,另一台顯示 n/a。

以下輸出是在兩台伺服器上執行的結果。只把主機名稱、IP 位址和套件版本號換成範例值,變更時間和時區的指令沒有在正式運作的伺服器上執行。

1️⃣ timedatectl 用法與 Linux 伺服器時間確認

不加選項執行 timedatectl,結果和加上 status 相同。系統時鐘與硬體時鐘(RTC)的時間、時區和同步狀態集中在同一個畫面。以下是在 Debian 12 伺服器上執行的結果。

timedatectl
               Local time: Wed 2026-10-28 19:49:57 UTC
           Universal time: Wed 2026-10-28 19:49:57 UTC
                 RTC time: Wed 2026-10-28 19:49:57
                Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
              NTP service: n/a
          RTC in local TZ: no

Debian 12 伺服器的時區是 Etc/UTC,所以 Local time 和 Universal time 顯示相同的時間。每一行要確認的內容和兩台伺服器的結果整理在下表。

輸出行查看的資訊兩台伺服器的結果與確認重點
Local time套用時區後系統時鐘的目前時間變更時區後,只有這一行和 date 的結果會改成新時區
Universal time以 UTC 表示的同一時間變更時區也不變 — 在 Etc/UTC 的 Debian 12 伺服器上與 Local time 相同
RTC time硬體時鐘(RTC)的時間不顯示時區 — RTC in local TZ 為 no 時是 UTC 時間
Time zone設定的時區、縮寫以及與 UTC 的時差變更時請使用 list-timezones 清單中的名稱
System clock synchronized核心是否認為時鐘已同步兩台都是 yes — 若為 no,先用 chronyc tracking 或 ntpq -p 確認參考伺服器
NTP servicetimedatectl 可開關的同步服務是否正在執行AlmaLinux 9(chrony)為 active,Debian 12(ntpsec)為 n/a — n/a 表示 timedatectl 不認得該服務,請用 systemctl 確認
RTC in local TZ硬體時鐘是否使用本地時間(no = UTC)兩台都是 no — 把 yes 改成 UTC 的指令是 set-local-rtc 0

Linux 有兩個時鐘。系統時鐘是開機後由核心維持的時鐘,硬體時鐘則是伺服器關機時也會保持時間的主機板時鐘。

硬體時鐘用 hwclock 直接讀取。hwclock 會把時間換算成目前時區後輸出。在 AlmaLinux 伺服器上於指令前加上 TZ=UTC 讀取,結果是結尾帶 +00:00 的 UTC 時間。

TZ=UTC hwclock --show
2026-10-28 19:53:33.006788+00:00

在以一般帳號連線的 Debian 12 伺服器上,同一個指令無法存取硬體時鐘就結束了。

/usr/sbin/hwclock --show
hwclock: Cannot access the Hardware Clock via any known method.
hwclock: Use the --verbose option to see the details of our search for an access method.

RTC in local TZ 這一行和 /etc/adjtime 檔案的第三行是同一個設定。AlmaLinux 伺服器的第三行是 UTC,表示硬體時鐘以 UTC 維持。

cat /etc/adjtime
0.0 0 0.0
0
UTC

在指令稿中讀取值時,用 show 代替 status。在 Debian 12 伺服器上執行,同樣的資訊會以「名稱=值」的形式每行輸出一項。

timedatectl show
Timezone=Etc/UTC
LocalRTC=no
CanNTP=no
NTP=no
NTPSynchronized=yes
TimeUSec=Wed 2026-10-28 19:49:57 UTC
RTCTimeUSec=Wed 2026-10-28 19:49:57 UTC

用 -p 選擇項目並加上 --value,就只留下值而沒有名稱。只取出時區名稱時使用這種寫法。

timedatectl show -p Timezone --value
Etc/UTC

🔲 timedatectl 指令模擬器

在下方模擬器中,可以親手輸入確認時間、列出時區、變更時區以及用 chronyc 確認同步的指令。

timedatectl 指令模擬器systemd 252 · chrony 4.8
[root@server work]#
只在瀏覽器內執行。變更的時區重新整理後會回到初始值(Etc/UTC),按 ↑↓ 可叫出先前輸入的指令。

2️⃣ Linux 伺服器時間同步狀態

System clock synchronized 這一行用來確認核心是否認為時鐘已同步,NTP service 這一行用來確認 timedatectl 可開關的同步服務是否正在執行。用 show 時,同樣的值會顯示為 NTPSynchronized 和 NTP,CanNTP 則表示是否有可開關的同步服務。

在使用 chrony 的 AlmaLinux 9 伺服器上,三個值都是 yes。

timedatectl show -p CanNTP -p NTP -p NTPSynchronized
CanNTP=yes
NTP=yes
NTPSynchronized=yes

在用 ntpsec 校時的 Debian 12 伺服器上,只有 NTPSynchronized 是 yes,CanNTP 和 NTP 都是 no。所以這台伺服器的 status 畫面中,NTP service 那一行顯示為 n/a。

timedatectl show -p CanNTP -p NTP -p NTPSynchronized
CanNTP=no
NTP=no
NTPSynchronized=yes

ntpsec 服務本身是在執行中的。

systemctl is-active ntpsec
active

timedatectl 認得的同步服務只有寫在 ntp-units.d 資料夾清單檔裡的服務,發行版的套件會把這個檔案放在 /usr/lib/systemd/ntp-units.d/(依官方手冊)。AlmaLinux 9 伺服器上有 chrony 套件安裝的清單檔,裡面只有 chronyd.service 一行。

cat /usr/lib/systemd/ntp-units.d/50-chronyd.list
chronyd.service
rpm -qf /usr/lib/systemd/ntp-units.d/50-chronyd.list
chrony-4.8-10.el9.x86_64

Debian 12 伺服器上沒有這個資料夾。ntpsec 是清單裡沒有的服務,所以 timedatectl 雖然知道時鐘已同步,卻無法開關這個服務。

ls /usr/lib/systemd/ntp-units.d/
ls: cannot access '/usr/lib/systemd/ntp-units.d/': No such file or directory
🖥️ timedatectlstatus, show, set-ntp
ntp-units.d/*.listtimedatectl 可開關的同步服務清單
chronyd.service在清單中 → NTP service: active
ntpsec.service不在清單中 → NTP service: n/a

3️⃣ 用 chronyc 確認時間同步

在使用 chrony 的伺服器上,時鐘依哪一台時間伺服器校時,用 chronyc 確認。sources 會逐行輸出 chronyd 正在詢問的時間伺服器及其狀態。

chronyc sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^- 192.0.2.10                    2  10   377   943   +272us[ +275us] +/-   55ms
^- ntp1.example.com              2  10   377    80    -28us[  -32us] +/- 3655us
^- 198.51.100.33                 3  10   257   384   -151us[ -156us] +/-   97ms
^- 198.51.100.82                 3  10   177   532   +157us[ +149us] +/-   45ms
^* 192.0.2.123                   3   4   377     2    -21us[  -23us] +/-  312us

開頭的 ^ 表示時間伺服器,第二個字元 * 表示目前時鐘所依據的參考伺服器,- 表示沒有納入計算的候選伺服器。參考伺服器的 Poll 4 表示每 2 的 4 次方即 16 秒詢問一次,Reach 377 表示最近八次回應全部收到。

tracking 會輸出系統時鐘與參考伺服器時間相差多少。

chronyc tracking
Reference ID    : C000027B (192.0.2.123)
Stratum         : 4
Ref time (UTC)  : Wed Oct 28 19:50:21 2026
System time     : 0.000002422 seconds slow of NTP time
Last offset     : -0.000002098 seconds
RMS offset      : 0.000000981 seconds
Frequency       : 6.348 ppm slow
Residual freq   : -0.001 ppm
Skew            : 0.017 ppm
Root delay      : 0.000300815 seconds
Root dispersion : 0.000150780 seconds
Update interval : 16.3 seconds
Leap status     : Normal

從 System time 那一行可看到系統時鐘比 NTP 時間慢 0.000002422 秒,Leap status 為 Normal。Update interval 16.3 秒是最近兩次時鐘更新之間的間隔。

要詢問哪些伺服器,由 /etc/chrony.conf 的 pool 行和 server 行決定。去掉註解和空行、只留下設定行後如下。

grep -v "^#" /etc/chrony.conf | grep -v "^$"
pool 2.almalinux.pool.ntp.org iburst
sourcedir /run/chrony-dhcp
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
keyfile /etc/chrony.keys
ntsdumpdir /var/lib/chrony
leapsectz right/UTC
logdir /var/log/chrony
server 192.0.2.123 prefer iburst minpoll 4 maxpoll 4

pool 行是詢問 AlmaLinux NTP 集區的設定,最後一行 server 的 prefer 是讓 chronyd 優先選擇這台伺服器的選項。makestep 1.0 3 的設定是:chronyd 啟動後的前三次更新中,若時鐘偏差超過 1 秒就一次調到位,之後則讓時鐘走快一點或慢一點來慢慢校正。rtcsync 讓核心每 11 分鐘把系統時間寫入硬體時鐘(依官方文件)。

在使用 ntpsec 的 Debian 12 伺服器上,用 ntpq -p 確認了同樣的內容。開頭的 * 是參考伺服器,三台伺服器都是每 1024 秒詢問一次。

ntpq -p
     remote           refid      st t when poll reach   delay   offset   jitter
===============================================================================
+203.0.113.43    198.51.100.28    2 u  835 1024  377 184.6893  -0.1018   1.4879
+203.0.113.44    198.51.100.27    2 u  547 1024  377 183.0827  -2.4227   4.0957
*ntp2.example.co 198.51.100.40    2 u  440 1024  377 177.4670  -0.5814   1.7070

4️⃣ 用 timedatectl 變更時區

時區名稱用 list-timezones 確認。大多是「洲/城市」形式的名稱,每行一個,兩台伺服器都是 598 個。

timedatectl list-timezones | head -5
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
timedatectl list-timezones | wc -l
598

清單很長,找名稱時用 grep 篩選。

timedatectl list-timezones | grep -i new_york
America/New_York

變更時區時,在 set-timezone 後面寫上清單中的名稱。這個指令會把 /etc/localtime 連結換成新的時區檔,所以一般帳號要加上 sudo 執行。

sudo timedatectl set-timezone America/New_York

/etc/localtime 是否為連到時區檔的連結,用 ls -l 確認。

ls -l /etc/localtime
lrwxrwxrwx 1 root root 27 Sep 24 12:52 /etc/localtime -> /usr/share/zoneinfo/Etc/UTC

輸入清單中沒有的名稱,會在變更時區前直接被拒絕。

timedatectl set-timezone Mars/Olympus
Failed to set time zone: Invalid or not installed time zone 'Mars/Olympus'

變更時區後,系統時鐘的時間不變,只有 Local time 和 date 指令的結果會以新時區顯示。若伺服器的硬體時鐘是 UTC,硬體時鐘也不會改變(依官方手冊)。

5️⃣ 用 timedatectl 開啟 NTP 與手動設定時間

set-ntp true 會啟動同步服務清單中的第一個服務,並設定為開機時也啟動。false 會停止清單中的服務,並設定為開機時不啟動(依官方手冊)。

sudo timedatectl set-ntp true

在沒有清單檔的 Debian 12 伺服器上,即使輸入與目前相同的 false,也以 NTP not supported 結束。像 ntpsec 這樣不在清單中的服務,要直接用 systemctl 啟動和停止。

timedatectl set-ntp false
Failed to set ntp: NTP not supported

手動設定時間時,在 set-time 後面寫上日期和時間。這個指令會同時設定系統時鐘和硬體時鐘。

sudo timedatectl set-time '2026-10-28 20:00:00'

在 Debian 12 伺服器上輸入格式錯誤的值,時間不會改變並以錯誤結束。

timedatectl set-time bad
Failed to parse time specification 'bad': Invalid argument

在使用 chrony 的伺服器上,要一次校正偏差很大的時鐘時,使用 chronyc makestep。

sudo chronyc makestep

makestep 會捨棄原本正在慢慢校正的剩餘差距,讓系統時鐘立刻跳過這段差距。官方文件警告時間突然改變可能會影響部分軟體,所以只在時鐘偏差大到難以慢慢校正時才使用。

🔢 FAQ & 推薦內容

chrony 或 ntpsec 這類 NTP 服務會持續校正時鐘,所以幾乎不需要用 cron 執行 rdate。確認過的 AlmaLinux 9 伺服器沒有安裝 rdate,可安裝的套件清單中也沒有。Debian 12 伺服器的套件庫中有 rdate 1.11 套件,但沒有安裝。

timesync-status 是 systemd-timesyncd 專用的指令。在使用 chrony 的 AlmaLinux 9 伺服器和使用 ntpsec 的 Debian 12 伺服器上,兩者都以 Failed to query server 錯誤結束。這類伺服器請用 chronyc tracking 或 ntpq -p 確認同步狀態。

官方手冊說明,把硬體時鐘設為本地時間,在變更時區或日光節約時間切換時可能會出問題。因此建議盡量設為 UTC,改成 UTC 的指令是 sudo timedatectl set-local-rtc 0。確認過的兩台伺服器都是 no(UTC)。

ℹ️ 聯盟行銷說明
本站內容包含聯盟行銷連結。訪客透過這些連結購買商品或服務時,本站會從賣家獲得佣金。在這個過程中,購買者支付的金額(遇到活動折扣時金額會降低↓)並不會因此提高。刊登的價格、折扣與庫存資訊以撰寫當時為準,可能與實際情況不同,購買前請向賣家做最後確認。商品的挑選與評價依本站自訂的標準撰寫,是否支付佣金不會影響介紹順序或評價內容。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Prove your humanity: 10   +   1   =