以Linux服務(wù)器時間為中心,如何觀測和調(diào)整系統(tǒng)時間?
當(dāng)前,在現(xiàn)代網(wǎng)絡(luò)與技術(shù)的時代,Linux 服務(wù)器亦存在其他的感知與挑戰(zhàn)。特別是系統(tǒng)的時間同步,這更是 Linux 服務(wù)器常遇到的有關(guān)困難之一。準(zhǔn)確、同步的時間是服務(wù)器進(jìn)行正常操作的要求之一,尤其對于一些精確計時的任務(wù),時間的同步就更為重要。那么,在這篇文章中我們著重講解以 Linux 服務(wù)器時間為中心,如何觀測和調(diào)整系統(tǒng)時間。
1、時間同步
不同的 Linux 發(fā)行版固然存在許多相同的內(nèi)核功能和支撐,但它們?nèi)耘f可能存在一定的扭曲。畢竟一些不同 Linux 發(fā)行版的配置與支持,如時間同步設(shè)置,還是存在少量差異的。在 Linux 中,為了保證時間的精確度,操作系統(tǒng)一般依賴一個叫做 NTP(Network Time Protocol,網(wǎng)絡(luò)時間協(xié)議)的網(wǎng)絡(luò)時間協(xié)議。NTP 是一個開放的、可伸縮的時間同步解決方案,可以克服網(wǎng)絡(luò)的延遲、抖動誤差及時鐘偏差等現(xiàn)象,統(tǒng)一設(shè)備時間,以滿足精確的時間要求。
在需要使用 NTP 服務(wù)的機(jī)器上,必須提前安裝 NTP。而在 Linux 發(fā)行版中,經(jīng)常有較為相似的安裝流程。在 Ubuntu 中,可以用以下命令安裝 NTP 服務(wù):
```
sudo apt-get install ntpdate
```
如果你使用 CentOS,則可以使用以下命令安裝:
```
sudo yum install ntp
```
接下來,必須將該服務(wù)器的時間與網(wǎng)絡(luò)的時間進(jìn)行同步。可以使用以下命令進(jìn)行手動授時:
```
ntpdate time.nist.gov
```
2、時間查看
有時候,我們需要手動查看當(dāng)前 Linux 系統(tǒng)的時間輸入以下命令:```
date
```
該命令將返回系統(tǒng)的當(dāng)前日期和時間,通常格式如下:
```
Sat Jan 25 14:22:55 EST 2020
```
在這個樣例中,“Sat Jan 25 14:22:55 EST 2020” 是表示當(dāng)前時間的字符串,其中日期是“Jan 25(1月25日)”, 時間是“14:22:55(下午 2:22:55)”,時區(qū)是 EST 美國東部標(biāo)準(zhǔn)時間。在只查看日期或時間時,還可以使用其他的格式化選項(xiàng)。例如,要顯示當(dāng)前時間的小時、分鐘和秒:
```
date +%T
```
3、系統(tǒng)時間調(diào)整
在確保了時間同步之后,就可以對 Linux 系統(tǒng)的時間進(jìn)行調(diào)整。要升高或降低時鐘計數(shù)器,系統(tǒng)管理員可以使用 date 命令。例如,如果想將時間提高 30 秒,可執(zhí)行以下命令:
```
sudo date +%s -s "$(($(date +%s)+30))"
```
如果要將時間回調(diào) 5 分鐘,可執(zhí)行以下命令:
```
sudo date +%s -s "$(($(date +%s)-300))"
```
需要注意,時間設(shè)置的正確性對系統(tǒng)穩(wěn)定性和數(shù)據(jù)完整性有重要影響。
4、硬件時鐘與系統(tǒng)時鐘
在 Linux 上,通常有硬件時鐘(RTC)和系統(tǒng)時鐘(Softclock)集成兩種時鐘。硬件時鐘通常是由計算機(jī) BIOS 控制,在 Linux 啟動時由內(nèi)核讀取,因此硬件時鐘只在系統(tǒng)準(zhǔn)備關(guān)機(jī)時更新。系統(tǒng)時鐘由內(nèi)核控制,它產(chǎn)生和維護(hù)當(dāng)前時間的所有用處。
但是在硬件時鐘與軟件時鐘同步方面,存在問題的通常是在硬件時鐘使用錯誤的時區(qū)。由于硬件時鐘通常無法詳細(xì)設(shè)置,這時需要在 Linux 系統(tǒng)啟動時記錄正確的硬件時鐘時間和方區(qū)。
在"/etc/sysconfig/clock" 的最后幾行中,可以檢查時鐘設(shè)置:
```
ZONE="Australia/Sydney" UTC=true ARC=false
```
將 systemd 啟動服務(wù)配置文件 /etc/systemd/system.conf 配置為使用 local RTC 設(shè)置硬件時鐘。
```
[Time]
...
# Use RTC (Real-Time Clock) as a boot clock source (only for systems that support it).
# Note that this requires exposing the RTC device to user mode, which is by default not done
# on modern systems. systemd-tmpfiles-setup.service(8) will attempt to create the required
# device nodes by itself unless CONFIG_RTC_SYSTOHC is disabled at build-time.
#Set only if you want to use RTC for clock synchronization.
#Otherwise uses NTP synchronization (default).
#Defaulf value is "no".
#To enable RTC synchronization, you need to make sure that /run/systemd/ntp-units.d/ directory exists.
#This is created by systemd-tmpfiles-setup.service(8). If the directory doesnt exist
#it can be created manually or by running this command:
# systemd-tmpfiles --create --prefix /run/systemd/ntp-units.d/
ForceLocalRTC=yes
...
```
后面的代碼 ForceLocalRTC=yes 就是啟用了硬件時鐘。
最后,總結(jié)一下本文講述的內(nèi)容:我們首先講解了時間同步的原理和方法,在 Linux 系統(tǒng)中使用 NTP 服務(wù)來進(jìn)行時間同步;然后我們介紹了時間查看命令,可以手動查看當(dāng)前 Linux 系統(tǒng)的時間;接著我們闡述了如何進(jìn)行系統(tǒng)時間調(diào)整,管理員可以使用 date 命令來升高或降低時鐘計數(shù)器;最后,我們涉及兩種時鐘:硬件時鐘和系統(tǒng)時鐘,Linux 系統(tǒng)將兩種時間進(jìn)行整合管理,并且進(jìn)行相應(yīng)的配置。
雖然時間調(diào)整看上去是一件簡單、輕松的操作,但在實(shí)際操作中仍需要考慮到多方面的因素,保證系統(tǒng)時鐘的正確性與穩(wěn)定性。因此,我們建議大家在進(jìn)行時間調(diào)整操作之前,首先了解相關(guān)配置和設(shè)置。
在實(shí)際的 Linux 服務(wù)器運(yùn)行中,時間同步也是一個非常重要的問題,管理員必須事先了解和熟練掌握時間同步這個重要的技術(shù)點(diǎn)。只有做好時間同步,才能保證服務(wù)器時間的準(zhǔn)確和整個 Linux 系統(tǒng)的穩(wěn)定性。