本篇文章,是要設定系統的時區與時間,並維護時區與時間的設定。
作業系統的時間之校正是很重要的,原因是有些服務都需要取得系統的時間,若時間不對的話,很難去知道發生問題的時間點,舉個例子,像是作業系統在寫入日誌檔案的時候,就需要取得系統時間,來記錄什麼時候發生的訊息,若是系統時間有錯誤的話,就不知道什麼時候發生錯誤了。設定本地端的時間與時區,可以使用timedatectl
這個指令做到,相關的用法如下:
[rockylinux@workstation ~]$ timedatectl
Local time: Thu 2021-10-07 00:51:19 CST
Universal time: Wed 2021-10-06 16:51:19 UTC
RTC time: Wed 2021-10-06 16:51:17
Time zone: Asia/Taipei (CST, +0800)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
[rockylinux@workstation ~]$
從上述輸出的指令可以得知,顯示很多不同種類時間下所取得的時間,從上而下之解釋如下:
若要知道所有的時區清單的話,則可以使用list-timezones
參數來觀看,下列為此指令執行所輸出的訊息:
[rockylinux@workstation ~]$ timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Bamako
Africa/Bangui
Africa/Banjul
Africa/Bissau
Africa/Blantyre
Africa/Brazzaville
Africa/Bujumbura
Africa/Cairo
Africa/Casablanca
Africa/Ceuta
Africa/Conakry
Africa/Dakar
Africa/Dar_es_Salaam
Africa/Djibouti
Africa/Douala
Africa/El_Aaiun
Africa/Freetown
Africa/Gaborone
Africa/Harare
Africa/Johannesburg
Africa/Juba
Africa/Kampala
lines 1-27
由於世界上的時區清單很多,因此當執行上述的指令之後,則會進入閱讀器模式,如同之前的一些指令一樣,按下「q」即可以離開此閱讀器,方向之上下鍵則是畫面控制往上還是往下。
若要修改時區的話,則可以使用set-timezone
之參數來做到,相關的指令執行輸出的訊息如下:
[rockylinux@workstation ~]$ sudo timedatectl set-timezone Asia/Tokyo
[sudo] password for rockylinux:
[rockylinux@workstation ~]$ timedatectl
Local time: Thu 2021-10-07 02:06:45 JST
Universal time: Wed 2021-10-06 17:06:45 UTC
RTC time: Wed 2021-10-06 17:06:43
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
[rockylinux@workstation ~]$
從上述執行指令所輸出的訊息可以得知,首先先將系統時區改成Asia/Tokyo,接著再執行timedatectl
指令則會發現有關於系統時間的資訊就被改成比台灣的時間快1小時了。若要以互動式方式找到時區也是可以的,可以使用tzselect來做到,相關的指令執行後所輸出的訊息如下:
[rockylinux@workstation ~]$ sudo tzselect
Please identify a location so that time zone rules can be set correctly.
Please select a continent, ocean, "coord", or "TZ".
1) Africa
2) Americas
3) Antarctica
4) Asia
5) Atlantic Ocean
6) Australia
7) Europe
8) Indian Ocean
9) Pacific Ocean
10) coord - I want to use geographical coordinates.
11) TZ - I want to specify the time zone using the Posix TZ format.
#? 4
Please select a country whose clocks agree with yours.
1) Afghanistan 18) Israel 35) Palestine
2) Armenia 19) Japan 36) Philippines
3) Azerbaijan 20) Jordan 37) Qatar
4) Bahrain 21) Kazakhstan 38) Russia
5) Bangladesh 22) Korea (North) 39) Saudi Arabia
6) Bhutan 23) Korea (South) 40) Singapore
7) Brunei 24) Kuwait 41) Sri Lanka
8) Cambodia 25) Kyrgyzstan 42) Syria
9) China 26) Laos 43) Taiwan
10) Cyprus 27) Lebanon 44) Tajikistan
11) East Timor 28) Macau 45) Thailand
12) Georgia 29) Malaysia 46) Turkmenistan
13) Hong Kong 30) Mongolia 47) United Arab Emirates
14) India 31) Myanmar (Burma) 48) Uzbekistan
15) Indonesia 32) Nepal 49) Vietnam
16) Iran 33) Oman 50) Yemen
17) Iraq 34) Pakistan
#? 43
The following information has been given:
Taiwan
Therefore TZ='Asia/Taipei' will be used.
Selected time is now: Thu Oct 7 01:12:16 CST 2021.
Universal Time is now: Wed Oct 6 17:12:16 UTC 2021.
Is the above information OK?
1) Yes
2) No
#? 1
You can make this change permanent for yourself by appending the line
TZ='Asia/Taipei'; export TZ
to the file '.profile' in your home directory; then log out and log in again.
Here is that TZ value again, this time on standard output so that you
can use the /bin/tzselect command in shell scripts:
Asia/Taipei
一開始會選擇要設定時區在哪一洲,假設在亞洲,則選擇Asia,即選擇「4」,接著就會有所有亞洲國家列出,再選擇國家,這邊選擇Taiwan為例子,即選擇「43」,接著會輸出是否得到的時區字串正確,若是正確的話就輸入「1」,最後就是輸出一些如何設定這個時區的方式了。
因為RockyLinux 8開始,相對於RHEL 8,在之前的版本;如6與7版,都沒有Chrony這個服務來設定NTP伺服器來設定時間與校時,到了8開始之後,都是以chronyd這個服務為主。相關的設定檔案都在:/etc/chrony.conf,使用root使用者並以vim指令開啟設定檔,相關執行指令所輸出的訊息如下:
[rockylinux@workstation ~]$ sudo vim /etc/chrony.conf
[sudo] password for rockylinux:
接著可以看到前三行的設定內容,相關的內容如下:
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
pool 2.pool.ntp.org iburst
從上述的設定來看,前二行註解說明已經講得很清楚,就是這裡的設定的是有關於網路上公開的NTP伺服器,在台灣也有幾個公開的NTP伺服器,假設使用這個公開的NTP伺服器:time.stdtime.gov.tw,修改過的設定內容如下:
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server time.stdtime.gov.tw iburst
設定完成之後,存檔離開,接著將chronyd背景服務使用systemctl之指令進行重啟,相關執行指令的方式與輸出的訊息如下:
[rockylinux@workstation ~]$ sudo systemctl restart chronyd
[sudo] password for rockylinux:
[rockylinux@workstation ~]$
接著可以使用chronyc sources -v
指令來確定是否設定的NTP伺服器已經與本地端系統同步完成,相關指令執行輸出的訊息如下:
[rockylinux@workstation ~]$ sudo chronyc sources -v
210 Number of sources = 1
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| / '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 118-163-81-61.hinet-ip.h> 2 6 37 32 -80us[ +918us] +/- 29ms
[rockylinux@workstation ~]$