NTP 是通過網(wǎng)絡(luò)來同步時(shí)間的一種 TCP/IP 協(xié)議。通常客戶端向服務(wù)器請(qǐng)求當(dāng)前的時(shí)間,并根據(jù)結(jié)果來設(shè)置其時(shí)鐘。
這個(gè)描述是挺簡單的,實(shí)現(xiàn)這一功能卻是極為復(fù)雜的 - 首先要有多層 NTP 服務(wù)器,第一層 NTP 服務(wù)器連接原子時(shí)鐘,第二層、第三層服務(wù)器則擔(dān)起負(fù)載均衡的責(zé)任,以處理因特網(wǎng)傳來的所有請(qǐng)求。另外,客戶端可能也超乎你想象的復(fù)雜 - 它必須排除通訊延遲,調(diào)整時(shí)間的同時(shí)不干擾其它在服務(wù)器中運(yùn)行的進(jìn)程。幸運(yùn)的是,所有的這些復(fù)雜性都進(jìn)行了封裝,你是不可見也不需要見到的。
在 Ubuntu 中,是使用 ntpdate
和 ntpd
來同步時(shí)間的。
timedatectl
在最新的 Ubuntu 版本中,timedatectl
替代了老舊的 ntpdate
。默認(rèn)情況下,timedatectl
在系統(tǒng)啟動(dòng)的時(shí)候會(huì)立刻同步時(shí)間,并在稍后網(wǎng)絡(luò)連接激活后通過 socket 再次檢查一次。
如果已安裝了 ntpdate
/ ntp
,timedatectl
會(huì)退而讓你使用之前的設(shè)置。這樣確保了兩個(gè)時(shí)間同步服務(wù)不會(huì)相互沖突,同時(shí)在你升級(jí)的時(shí)候還保留原本的行為和配置。但這也意味著從舊版本的發(fā)行版升級(jí)時(shí) ntp
/ntpdate
仍會(huì)安裝,因此會(huì)導(dǎo)致新的基于 systemd 的時(shí)間服務(wù)被禁用。
timesyncd
在最新的 Ubuntu 版本中,timesyncd
替代了 ntpd
的客戶端的部分。默認(rèn)情況下 timesyncd
會(huì)定期檢測(cè)并同步時(shí)間。它還會(huì)在本地存儲(chǔ)更新的時(shí)間,以便在系統(tǒng)重啟時(shí)做時(shí)間單步調(diào)整。
通過 timedatectl
和 timesyncd
設(shè)置的當(dāng)前時(shí)間狀態(tài)和時(shí)間配置,可以使用 timedatectl status
命令來進(jìn)行確認(rèn)。
1
2
3
4
5
6
7
8
|
timedatectl status Local time : Fri 2016-04-29 06:32:57 UTC Universal time : Fri 2016-04-29 06:32:57 UTC RTC time : Fri 2016-04-29 07:44:02 Time zone: Etc /UTC (UTC, +0000) Network time on: yes NTP synchronized: no RTC in local TZ: no |
如果安裝了 NTP,并用它替代 timedatectl
來同步時(shí)間,則 NTP synchronized
將被設(shè)置為 yes
。
timedatectl
和 timesyncd
用來獲取時(shí)間的 nameserver 可以通過 /etc/systemd/timesyncd.conf
來指定,另外在 /etc/systemd/timesyncd.conf.d/
下還有靈活的附加配置文件。
ntpdate
由于 timedatectl
的存在,各發(fā)行版已經(jīng)棄用了 ntpdate
,默認(rèn)不再進(jìn)行安裝。如果你安裝了,它會(huì)在系統(tǒng)啟動(dòng)的時(shí)候根據(jù) Ubuntu 的 NTP 服務(wù)器來設(shè)置你電腦的時(shí)間。之后每當(dāng)一個(gè)新的網(wǎng)絡(luò)接口啟動(dòng)時(shí),它就會(huì)重新嘗試同步時(shí)間 —— 在這期間只要其涵蓋的時(shí)間差不是太大,它就會(huì)慢慢偏移時(shí)間。該行為可以通過 -B
/-b
開關(guān)來進(jìn)行控制。
1
|
ntpdate ntp.ubuntu.com |
時(shí)間服務(wù)器
默認(rèn)情況下,基于 systemd 的工具都是從 ntp.ubuntu.com
請(qǐng)求時(shí)間同步的。經(jīng)典的基于 ntpd
的服務(wù)基本上都是使用 [0-3].ubuntu.pool.ntp.org
池中的 2.ubuntu.pool.ntp.org
,還有 ntp.ubuntu.com
,此外需要的話還支持 IPv6。如果想強(qiáng)制使用 IPv6,可以使用 ipv6.ntp.ubuntu.com
,不過這并非默認(rèn)配置。
ntpd
ntp 的守護(hù)進(jìn)程 ntpd
會(huì)計(jì)算你的系統(tǒng)時(shí)鐘的時(shí)間偏移量并且持續(xù)的進(jìn)行調(diào)整,所以不會(huì)出現(xiàn)時(shí)間差距較大的更正,比如說,不會(huì)導(dǎo)致不連續(xù)的日志。該進(jìn)程只花費(fèi)少量的進(jìn)程資源和內(nèi)存,但對(duì)于現(xiàn)代的服務(wù)器來說實(shí)在是微不足道的了。
安裝
要安裝 ntpd,在終端命令行中輸入:
1
|
sudo apt install ntp |
配置
編輯 /etc/ntp.conf
—— 增加/移除 server
行。默認(rèn)配置有以下服務(wù)器:
1
2
3
4
5
6
7
|
# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board # on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for # more information. server 0.ubuntu.pool.ntp.org server 1.ubuntu.pool.ntp.org server 2.ubuntu.pool.ntp.org server 3.ubuntu.pool.ntp.org |
修改配置文件之后,你需要重新加載 ntpd
:
1
|
sudo systemctl reload ntp.service |
查看狀態(tài)
使用 ntpq
來查看更多信息:
1
2
3
4
5
6
7
8
|
# sudo ntpq -p remote refid st t when poll reach delay offset jitter ======================================================== +stratum2-2.NTP. 129.70.130.70 2 u 5 64 377 68.461 -44.274 110.334 +ntp2.m-online.n 212.18.1.106 2 u 5 64 377 54.629 -27.318 78.882 *145.253.66.170 .DCFa. 1 u 10 64 377 83.607 -30.159 68.343 +stratum2-3.NTP. 129.70.130.70 2 u 5 64 357 68.795 -68.168 104.612 +europium.canoni 193.79.237.14 2 u 63 64 337 81.534 -67.968 92.792 |
PPS 支持
從 Ubuntu 16.04 開始,ntp 支持 PPS 規(guī)范,給 ntp 提供了本地時(shí)間源,以提供更高的精度。以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://linux.cn/article-8091-1.html