如何在 Ubuntu 上設定時間同步

2019-08-13 13:54:00

你可能設定過 cron 任務 來在特定時間備份重要檔案或執行系統相關任務。也許你設定了一個紀錄檔伺服器在特定時間間隔輪轉紀錄檔。但如果你的時鐘不同步,這些任務將無法按時執行。這就是要在 Linux 系統上設定正確的時區並保持時鐘與網際網路同步的原因。本指南介紹如何在 Ubuntu Linux 上設定時間同步。下面的步驟已經在 Ubuntu 18.04 上進行了測試,但是對於使用 systemd 的 timesyncd 服務的其他基於 Ubuntu 的系統它們是相同的。

在 Ubuntu 上設定時間同步

通常,我們在安裝時設定時區。但是,你可以根據需要更改或設定不同的時區。

首先,讓我們使用 date 命令檢視 Ubuntu 系統中的當前時區:

$ date

範例輸出:

Tue Jul 30 11:47:39 UTC 2019

如上所見,date 命令顯示實際日期和當前時間。這裡,我當前的時區是 UTC,代表協調世界時

或者,你可以在 /etc/timezone 檔案中查詢當前時區。

$ cat /etc/timezoneUTC

現在,讓我們看看時鐘是否與網際網路同步。只需執行:

$ timedatectl

範例輸出:

Local time: Tue 2019-07-30 11:53:58 UTCUniversal time: Tue 2019-07-30 11:53:58 UTCRTC time: Tue 2019-07-30 11:53:59Time zone: Etc/UTC (UTC, +0000)System clock synchronized: yessystemd-timesyncd.service active: yesRTC in local TZ: no

如你所見,timedatectl 命令顯示本地時間、世界時、時區以及系統時鐘是否與網際網路伺服器同步,以及 systemd-timesyncd.service 是處於活動狀態還是非活動狀態。就我而言,系統時鐘已與網際網路時間伺服器同步。

如果時鐘不同步,你會看到下面截圖中顯示的 System clock synchronized: no

時間同步已禁用。

注意:上面的截圖是舊截圖。這就是你看到不同日期的原因。

如果你看到 System clock synchronized: 值設定為 no,那麼 timesyncd 服務可能處於非活動狀態。因此,只需重新啟動服務並看下是否正常。

$ sudo systemctl restart systemd-timesyncd.service

現在檢查 timesyncd 服務狀態:

$ sudo systemctl status systemd-timesyncd.service● systemd-timesyncd.service - Network Time SynchronizationLoaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)Active: active (running) since Tue 2019-07-30 10:50:18 UTC; 1h 11min agoDocs: man:systemd-timesyncd.service(8)Main PID: 498 (systemd-timesyn)Status: "Synchronized to time server [2001:67c:1560:8003::c7]:123 (ntp.ubuntu.com)."Tasks: 2 (limit: 2319)CGroup: /system.slice/systemd-timesyncd.service└─498 /lib/systemd/systemd-timesyncdJul 30 10:50:30 ubuntuserver systemd-timesyncd[498]: Network configuration changed, trying to estabJul 30 10:50:31 ubuntuserver systemd-timesyncd[498]: Network configuration changed, trying to estabJul 30 10:50:31 ubuntuserver systemd-timesyncd[498]: Network configuration changed, trying to estabJul 30 10:50:32 ubuntuserver systemd-timesyncd[498]: Network configuration changed, trying to estabJul 30 10:50:32 ubuntuserver systemd-timesyncd[498]: Network configuration changed, trying to estabJul 30 10:50:35 ubuntuserver systemd-timesyncd[498]: Network configuration changed, trying to estabJul 30 10:50:35 ubuntuserver systemd-timesyncd[498]: Network configuration changed, trying to estabJul 30 10:50:35 ubuntuserver systemd-timesyncd[498]: Network configuration changed, trying to estabJul 30 10:50:35 ubuntuserver systemd-timesyncd[498]: Network configuration changed, trying to estabJul 30 10:51:06 ubuntuserver systemd-timesyncd[498]: Synchronized to time server [2001:67c:1560:800

如果此服務已啟用並處於活動狀態,那麼系統時鐘應與網際網路時間伺服器同步。

你可以使用命令驗證是否啟用了時間同步:

$ timedatectl

如果仍然不起作用,請執行以下命令以啟用時間同步:

$ sudo timedatectl set-ntp true

現在,你的系統時鐘將與網際網路時間伺服器同步。

使用 timedatectl 命令更改時區

如果我想使用 UTC 以外的其他時區怎麼辦?這很容易!

首先,使用命令列出可用時區:

$ timedatectl list-timezones

你將看到類似於下圖的輸出。

使用 timedatectl 命令列出時區

你可以使用以下命令設定所需的時區(例如,Asia/Shanghai):

(LCTT 譯註:本文原文使用印度時區作為範例,這裡為了便於使用,換為中國標準時區 CST。另外,在時區設定中,要注意 CST 這個縮寫會代表四個不同的時區,因此建議使用城市和 UTC+8 來說設定。)

$ sudo timedatectl set-timezone Asia/Shanghai

使用 date 命令再次檢查時區是否已真正更改:

$ dateTue Jul 30 20:22:33 CST 2019

或者,如果需要詳細輸出,請使用 timedatectl 命令:

$ timedatectlLocal time: Tue 2019-07-30 20:22:35 CSTUniversal time: Tue 2019-07-30 12:22:35 UTCRTC time: Tue 2019-07-30 12:22:36Time zone: Asia/Shanghai (CST, +0800)System clock synchronized: yessystemd-timesyncd.service active: yesRTC in local TZ: no

如你所見,我已將時區從 UTC 更改為 CST(中國標準時間)。()

要切換回 UTC 時區,只需執行:

$ sudo timedatectl set-timezone UTC

使用 tzdata 更改時區

在較舊的 Ubuntu 版本中,沒有 timedatectl 命令。這種情況下,你可以使用 tzdata(Time zone data)來設定時間同步。

$ sudo dpkg-reconfigure tzdata

選擇你居住的地理區域。對我而言,我選擇 Asia。選擇 OK,然後按確認鍵。

接下來,選擇與你的時區對應的城市或地區。這裡,我選擇了 Kolkata(LCTT 譯註:中國使用者請相應使用 Shanghai 等城市)。

最後,你將在終端中看到類似下面的輸出。

Current default time zone: 'Asia/Shanghai'Local time is now: Tue Jul 30 21:59:25 CST 2019.Universal Time is now: Tue Jul 30 13:59:25 UTC 2019.

在圖形模式下設定時區

有些使用者可能對命令列方式不太滿意。如果你是其中之一,那麼你可以輕鬆地在圖形模式的系統設定面板中進行設定。

點選 Super 鍵(Windows 鍵),在 Ubuntu dash 中輸入 settings,然後點選設定圖示。

從 Ubuntu dash 啟動系統的設定

或者,單擊位於 Ubuntu 桌面右上角的向下箭頭,然後單擊左上角的“設定”圖示。

從頂部面板啟動系統的設定

在下一個視窗中,選擇“細節”,然後單擊“日期與時間”選項。開啟“自動的日期與時間”和“自動的時區”。

在 Ubuntu 中設定自動時區

關閉設定視窗就行了!你的系統始終應該與網際網路時間伺服器同步了。