以L(fǎng)inux服務(wù)器時(shí)間為中心,如何觀(guān)測和調整系統時(shí)間?
當前,在現代網(wǎng)絡(luò )與技術(shù)的時(shí)代,Linux 服務(wù)器亦存在其他的感知與挑戰。特別是系統的時(shí)間同步,這更是 Linux 服務(wù)器常遇到的有關(guān)困難之一。準確、同步的時(shí)間是服務(wù)器進(jìn)行正常操作的要求之一,尤其對于一些精確計時(shí)的任務(wù),時(shí)間的同步就更為重要。那么,在這篇文章中我們著(zhù)重講解以 Linux 服務(wù)器時(shí)間為中心,如何觀(guān)測和調整系統時(shí)間。
1、時(shí)間同步
不同的 Linux 發(fā)行版固然存在許多相同的內核功能和支撐,但它們仍舊可能存在一定的扭曲。畢竟一些不同 Linux 發(fā)行版的配置與支持,如時(shí)間同步設置,還是存在少量差異的。在 Linux 中,為了保證時(shí)間的精確度,操作系統一般依賴(lài)一個(gè)叫做 NTP(Network Time Protocol,網(wǎng)絡(luò )時(shí)間協(xié)議)的網(wǎng)絡(luò )時(shí)間協(xié)議。NTP 是一個(gè)開(kāi)放的、可伸縮的時(shí)間同步解決方案,可以克服網(wǎng)絡(luò )的延遲、抖動(dòng)誤差及時(shí)鐘偏差等現象,統一設備時(shí)間,以滿(mǎn)足精確的時(shí)間要求。
在需要使用 NTP 服務(wù)的機器上,必須提前安裝 NTP。而在 Linux 發(fā)行版中,經(jīng)常有較為相似的安裝流程。在 Ubuntu 中,可以用以下命令安裝 NTP 服務(wù):
```
sudo apt-get install ntpdate
```
如果你使用 CentOS,則可以使用以下命令安裝:
```
sudo yum install ntp
```
接下來(lái),必須將該服務(wù)器的時(shí)間與網(wǎng)絡(luò )的時(shí)間進(jìn)行同步??梢允褂靡韵旅钸M(jìn)行手動(dòng)授時(shí):
```
ntpdate time.nist.gov
```
2、時(shí)間查看
有時(shí)候,我們需要手動(dòng)查看當前 Linux 系統的時(shí)間輸入以下命令:```
date
```
該命令將返回系統的當前日期和時(shí)間,通常格式如下:
```
Sat Jan 25 14:22:55 EST 2020
```
在這個(gè)樣例中,“Sat Jan 25 14:22:55 EST 2020” 是表示當前時(shí)間的字符串,其中日期是“Jan 25(1月25日)”, 時(shí)間是“14:22:55(下午 2:22:55)”,時(shí)區是 EST 美國東部標準時(shí)間。在只查看日期或時(shí)間時(shí),還可以使用其他的格式化選項。例如,要顯示當前時(shí)間的小時(shí)、分鐘和秒:
```
date +%T
```
3、系統時(shí)間調整
在確保了時(shí)間同步之后,就可以對 Linux 系統的時(shí)間進(jìn)行調整。要升高或降低時(shí)鐘計數器,系統管理員可以使用 date 命令。例如,如果想將時(shí)間提高 30 秒,可執行以下命令:
```
sudo date +%s -s "$(($(date +%s)+30))"
```
如果要將時(shí)間回調 5 分鐘,可執行以下命令:
```
sudo date +%s -s "$(($(date +%s)-300))"
```
需要注意,時(shí)間設置的正確性對系統穩定性和數據完整性有重要影響。
4、硬件時(shí)鐘與系統時(shí)鐘
在 Linux 上,通常有硬件時(shí)鐘(RTC)和系統時(shí)鐘(Softclock)集成兩種時(shí)鐘。硬件時(shí)鐘通常是由計算機 BIOS 控制,在 Linux 啟動(dòng)時(shí)由內核讀取,因此硬件時(shí)鐘只在系統準備關(guān)機時(shí)更新。系統時(shí)鐘由內核控制,它產(chǎn)生和維護當前時(shí)間的所有用處。
但是在硬件時(shí)鐘與軟件時(shí)鐘同步方面,存在問(wèn)題的通常是在硬件時(shí)鐘使用錯誤的時(shí)區。由于硬件時(shí)鐘通常無(wú)法詳細設置,這時(shí)需要在 Linux 系統啟動(dòng)時(shí)記錄正確的硬件時(shí)鐘時(shí)間和方區。
在"/etc/sysconfig/clock" 的最后幾行中,可以檢查時(shí)鐘設置:
```
ZONE="Australia/Sydney" UTC=true ARC=false
```
將 systemd 啟動(dòng)服務(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 就是啟用了硬件時(shí)鐘。
最后,總結一下本文講述的內容:我們首先講解了時(shí)間同步的原理和方法,在 Linux 系統中使用 NTP 服務(wù)來(lái)進(jìn)行時(shí)間同步;然后我們介紹了時(shí)間查看命令,可以手動(dòng)查看當前 Linux 系統的時(shí)間;接著(zhù)我們闡述了如何進(jìn)行系統時(shí)間調整,管理員可以使用 date 命令來(lái)升高或降低時(shí)鐘計數器;最后,我們涉及兩種時(shí)鐘:硬件時(shí)鐘和系統時(shí)鐘,Linux 系統將兩種時(shí)間進(jìn)行整合管理,并且進(jìn)行相應的配置。
雖然時(shí)間調整看上去是一件簡(jiǎn)單、輕松的操作,但在實(shí)際操作中仍需要考慮到多方面的因素,保證系統時(shí)鐘的正確性與穩定性。因此,我們建議大家在進(jìn)行時(shí)間調整操作之前,首先了解相關(guān)配置和設置。
在實(shí)際的 Linux 服務(wù)器運行中,時(shí)間同步也是一個(gè)非常重要的問(wèn)題,管理員必須事先了解和熟練掌握時(shí)間同步這個(gè)重要的技術(shù)點(diǎn)。只有做好時(shí)間同步,才能保證服務(wù)器時(shí)間的準確和整個(gè) Linux 系統的穩定性。