在 Linux 上使用 NTP 保持精確的時間
如何保持正確的時間,如何使用 NTP 和 systemd 讓你的電腦在不濫用時間伺服器的前提下保持同步。
它的時間是多少?
讓 Linux 來告訴你時間的時候,它是很奇怪的。你可能認為是使用 time
命令來告訴你時間,其實並不是,因為 time
只是一個測量一個進程運行了多少時間的計時器。為得到時間,你需要啟動並執行是 date
命令,你想查看更多的日期,你可以運行 cal
命令。檔案上的時間戳記也是一個容易混淆的地方,因為根據你的發行版預設情況不同,它一般有兩種不同的顯示方法。下面是來自 Ubuntu 16.04 LTS 的樣本:
$ ls-l
drwxrwxr-x 5 carla carla 4096Mar272017 stuff
drwxrwxr-x 2 carla carla 4096Dec811:32 things
-rw-rw-r--1 carla carla 626052Nov2112:07 fatpdf.pdf
-rw-rw-r--1 carla carla 2781Apr182017 oddlots.txt
有些顯示年,有些顯示時間,這樣的方式讓你的檔案更混亂。GNU 預設的情況是,如果你的檔案在六個月以內,則顯示時間而不是年。我想這樣做可能是有原因的。如果你的 Linux 是這樣的,嘗試用 ls -l --time-style=long-iso
命令,讓時間戳記用同一種方式去顯示,按字母順序排序。請查閱 如何更改 Linux 的日期和時間:簡單的命令 去學習 Linux 上行政時間的各種方法。
檢查當前設定
NTP —— 網路時間協議,它是保持電腦正確時間的老式方法。ntpd
是 NTP 精靈,它通過周期性地查詢公用時間伺服器來按需調整你的電腦時間。它是一個簡單的、輕量級的協議,使用它的準系統時設定非常容易。systemd 通過使用 systemd-timesyncd.service
已經越俎代庖地 “幹了 NTP 的活”,它可以用作 ntpd
的用戶端。
在我們開始與 NTP “打交道” 之前,先花一些時間來了檢查一下當前的時間設定是否正確。
你的系統上(至少)有兩個時鐘:系統時間 —— 它由 Linux 核心管理,第二個是你的主板上的硬體時鐘,它也稱為系統時鐘(RTC)。當你進入系統的 BIOS 時,你可以看到你的硬體時鐘的時間,你也可以去改變它的設定。當你安裝一個新的 Linux 時,在一些圖形化的時間管理器中,你會被詢問是否設定你的 RTC 為 UTC(世界標準時間Coordinated Universal Time)時區,因為所有的時區和夏令時都是基於 UTC 的。你可以使用 hwclock
命令去檢查:
$ sudohwclock--debug
hwclockfrom util-linux 2.27.1
Using the /dev interface to the clock.
Hardware clock is on UTC time
Assuming hardware clock is kept in UTC time.
Waitingfor clock tick...
...got clock tick
Time read fromHardwareClock:2018/01/2222:14:31
Hw clock time:2018/01/2222:14:31=1516659271 seconds since 1969
Time since last adjustment is1516659271 seconds
CalculatedHardwareClock drift is0.000000 seconds
Mon22Jan201802:14:30 PM PST .202760 seconds
Hardware clock is on UTC time
表明了你的電腦的 RTC 是使用 UTC 時間的,雖然它把該時間轉換為你的本地時間。如果它被設定為本地時間,它將顯示 Hardware clock is on local time
。
你應該有一個 /etc/adjtime
檔案。如果沒有的話,使用如下命令同步你的 RTC 為系統時間,
$ sudohwclock-w
這個命令將產生該檔案,內容看起來類似如下:
$ cat/etc/adjtime
0.00000015166619530.000000
1516661953
UTC
新發明的 systemd 方式是去運行 timedatectl
命令,運行它不需要 root 許可權:
$ timedatectl
Localtime:Mon2018-01-2214:17:51 PST
Universaltime:Mon2018-01-2222:17:51 UTC
RTC time:Mon2018-01-2222:17:51
Time zone:America/Los_Angeles(PST,-0800)
Networktime on:yes
NTP synchronized:yes
RTC inlocal TZ:no
RTC in local TZ: no
表明它使用 UTC 時間。那麼怎麼改成使用本地時間?這裡有許多種方法可以做到。最簡單的方法是使用一個圖形組態工具,比如像 openSUSE 中的 YaST。你也可使用 timedatectl
:
$ timedatectlset-local-rtc 0
或者編輯 /etc/adjtime
,將 UTC
替換為 LOCAL
。
systemd-timesyncd 用戶端
現在,我已經累了,但是我們剛到非常精彩的部分。誰能想到計時如此複雜?我們甚至還沒有瞭解到它的皮毛;閱讀 man 8 hwclock
去瞭解你的電腦如何保持時間的詳細內容。
systemd 提供了 systemd-timesyncd.service
用戶端,它可以查詢遠程時間伺服器並調整你的本地系統時間。在 /etc/systemd/timesyncd.conf
中配置你的(時間)伺服器。大多數 Linux 發行版都提供了一個預設配置,它指向他們維護的時間伺服器上,比如,以下是 Fedora 的:
[Time]
#NTP=
#FallbackNTP=0.fedora.pool.ntp.org 1.fedora.pool.ntp.org
你可以輸入你希望使用的其它時間伺服器,比如你自己的本地 NTP 伺服器,在 NTP=
行上輸入一個以空格分隔的伺服器列表。(別忘了取消這一行的注釋)NTP=
行上的任何內容都將覆蓋掉 FallbackNTP
行上的配置項。
如果你不想使用 systemd 呢?那麼,你將需要 NTP 就行。
配置 NTP 伺服器和用戶端
配置你自己的區域網路 NTP 伺服器是一個非常好的實踐,這樣你的網內電腦就不需要不停查詢公用 NTP 伺服器。在大多數 Linux 上的 NTP 都來自 ntp
包,它們大多都提供 /etc/ntp.conf
檔案去配置時間伺服器。查閱 NTP 時間伺服器池 去找到你所在的地區的合適的 NTP 伺服器集區。然後在你的 /etc/ntp.conf
中輸入 4 - 5 個伺服器,每個伺服器用單獨的一行:
driftfile /var/ntp.drift
logfile /var/log/ntp.log
server 0.europe.pool.ntp.org
server 1.europe.pool.ntp.org
server 2.europe.pool.ntp.org
server 3.europe.pool.ntp.org
driftfile
告訴 ntpd
它需要儲存用於啟動時使用時間伺服器快速同步你的系統時鐘的資訊。而日誌也將儲存在他們自己指定的目錄中,而不是轉儲到 syslog 中。如果你的 Linux 發行版預設提供了這些檔案,請使用它們。
現在去啟動精靈;在大多數主流的 Linux 中它的命令是 sudo systemctl start ntpd
。讓它運行幾分鐘之後,我們再次去檢查它的狀態:
$ ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================
+dev.smatwebdesi 192.168.194.893 u 25643792.456-6.39518.530
*chl.la 127.67.113.922 u 23643775.1758.8208.230
+four0.fairy.mat 35.73.197.1442 u 226437116.272-10.03340.151
-195.21.152.161195.66.241.22 u 276437107.5591.82227.346
我不知道這些內容是什麼意思,但重要的是,你的精靈已經與時間伺服器開始對話了,而這正是我們所需要的。你可以去運行 sudo systemctl enable ntpd
命令,永久啟用它。如果你的 Linux 沒有使用 systemd,那麼,給你留下的家庭作業就是找出如何去運行 ntpd
。
現在,你可以在你的區域網路中的其它電腦上設定 systemd-timesyncd
,這樣它們就可以使用你的本地 NTP 伺服器了,或者,在它們上面安裝 NTP,然後在它們的 /etc/ntp.conf
上輸入你的本地 NTP 伺服器。
NTP 伺服器會受到攻擊,而且需求在不斷增加。你可以通過運行你自己的公用 NTP 伺服器來提供協助。下周我們將學習如何運行你自己的公用伺服器。
通過來自 Linux 基金會和 edX 的免費課程 “Linux 入門” 來學習更多 Linux 的知識。
via: https://www.linux.com/learn/intro-to-linux/2018/1/keep-accurate-time-linux-ntp
作者:CARLA SCHRODER 譯者:qhwdw 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出
本文永久更新連結地址:https://www.bkjia.com/Linux/2018-03/151481.htm