timedatectl:Linux 伺服器時間同步狀態確認與時區設定
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: noDebian 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 service | timedatectl 可開關的同步服務是否正在執行 | 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 --show2026-10-28 19:53:33.006788+00:00在以一般帳號連線的 Debian 12 伺服器上,同一個指令無法存取硬體時鐘就結束了。
/usr/sbin/hwclock --showhwclock: 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/adjtime0.0 0 0.0
0
UTC在指令稿中讀取值時,用 show 代替 status。在 Debian 12 伺服器上執行,同樣的資訊會以「名稱=值」的形式每行輸出一項。
timedatectl showTimezone=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 --valueEtc/UTC🔲 timedatectl 指令模擬器
在下方模擬器中,可以親手輸入確認時間、列出時區、變更時區以及用 chronyc 確認同步的指令。
2️⃣ Linux 伺服器時間同步狀態
System clock synchronized 這一行用來確認核心是否認為時鐘已同步,NTP service 這一行用來確認 timedatectl 可開關的同步服務是否正在執行。用 show 時,同樣的值會顯示為 NTPSynchronized 和 NTP,CanNTP 則表示是否有可開關的同步服務。
在使用 chrony 的 AlmaLinux 9 伺服器上,三個值都是 yes。
timedatectl show -p CanNTP -p NTP -p NTPSynchronizedCanNTP=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 NTPSynchronizedCanNTP=no
NTP=no
NTPSynchronized=yesntpsec 服務本身是在執行中的。
systemctl is-active ntpsecactivetimedatectl 認得的同步服務只有寫在 ntp-units.d 資料夾清單檔裡的服務,發行版的套件會把這個檔案放在 /usr/lib/systemd/ntp-units.d/(依官方手冊)。AlmaLinux 9 伺服器上有 chrony 套件安裝的清單檔,裡面只有 chronyd.service 一行。
cat /usr/lib/systemd/ntp-units.d/50-chronyd.listchronyd.servicerpm -qf /usr/lib/systemd/ntp-units.d/50-chronyd.listchrony-4.8-10.el9.x86_64Debian 12 伺服器上沒有這個資料夾。ntpsec 是清單裡沒有的服務,所以 timedatectl 雖然知道時鐘已同步,卻無法開關這個服務。
ls /usr/lib/systemd/ntp-units.d/ls: cannot access '/usr/lib/systemd/ntp-units.d/': No such file or directory3️⃣ 用 chronyc 確認時間同步
在使用 chrony 的伺服器上,時鐘依哪一台時間伺服器校時,用 chronyc 確認。sources 會逐行輸出 chronyd 正在詢問的時間伺服器及其狀態。
chronyc sourcesMS 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 trackingReference 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 4pool 行是詢問 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.70704️⃣ 用 timedatectl 變更時區
時區名稱用 list-timezones 確認。大多是「洲/城市」形式的名稱,每行一個,兩台伺服器都是 598 個。
timedatectl list-timezones | head -5Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmaratimedatectl list-timezones | wc -l598清單很長,找名稱時用 grep 篩選。
timedatectl list-timezones | grep -i new_yorkAmerica/New_York變更時區時,在 set-timezone 後面寫上清單中的名稱。這個指令會把 /etc/localtime 連結換成新的時區檔,所以一般帳號要加上 sudo 執行。
sudo timedatectl set-timezone America/New_York/etc/localtime 是否為連到時區檔的連結,用 ls -l 確認。
ls -l /etc/localtimelrwxrwxrwx 1 root root 27 Sep 24 12:52 /etc/localtime -> /usr/share/zoneinfo/Etc/UTC輸入清單中沒有的名稱,會在變更時區前直接被拒絕。
timedatectl set-timezone Mars/OlympusFailed 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 falseFailed to set ntp: NTP not supported手動設定時間時,在 set-time 後面寫上日期和時間。這個指令會同時設定系統時鐘和硬體時鐘。
sudo timedatectl set-time '2026-10-28 20:00:00'在 Debian 12 伺服器上輸入格式錯誤的值,時間不會改變並以錯誤結束。
timedatectl set-time badFailed to parse time specification 'bad': Invalid argument在使用 chrony 的伺服器上,要一次校正偏差很大的時鐘時,使用 chronyc makestep。
sudo chronyc makestepmakestep 會捨棄原本正在慢慢校正的剩餘差距,讓系統時鐘立刻跳過這段差距。官方文件警告時間突然改變可能會影響部分軟體,所以只在時鐘偏差大到難以慢慢校正時才使用。
🔢 FAQ & 推薦內容
ℹ️ 聯盟行銷說明
本站內容包含聯盟行銷連結。訪客透過這些連結購買商品或服務時,本站會從賣家獲得佣金。在這個過程中,購買者支付的金額(遇到活動折扣時金額會降低↓)並不會因此提高。刊登的價格、折扣與庫存資訊以撰寫當時為準,可能與實際情況不同,購買前請向賣家做最後確認。商品的挑選與評價依本站自訂的標準撰寫,是否支付佣金不會影響介紹順序或評價內容。