第14章:设定系统时区与时间

前言

本篇文章,是要设定系统的时区与时间,并维护时区与时间的设定。

设定本地时间与时区

作业系统的时间之校正是很重要的,原因是有些服务都需要取得系统的时间,若时间不对的话,很难去知道发生问题的时间点,举个例子,像是作业系统在写入日志档案的时候,就需要取得系统时间,来记录什麽时候发生的讯息,若是系统时间有错误的话,就不知道什麽时候发生错误了。设定本地端的时间与时区,可以使用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 ~]$

从上述输出的指令可以得知,显示很多不同种类时间下所取得的时间,从上而下之解释如下:

  • Local time,指的是目前当下系统上面所设定的时间。
  • Universal time,指的是目前当下系统的UTC时间。
  • RTC time,实时时钟,意思就是硬体上面的时间,主机板上会有一个晶片,里面就是实时时钟,并靠CMOS电池进行供电。
  • Time zone,时区,这边设定为:Asia/Taipei,即UTC+8。
  • System clock synchronized,指的是系统时钟同步设定,设定值显示为开启。
  • NTP service,指的是NTP服务状态,NTP是网路时间协定,可以透过此网际网路协定来进行校时。
  • RTC in local TZ,是否有硬体同步本地时间,这里设定是没有,即作业系统上的时间与RTC硬体上的时间可能会不同。

若要知道所有的时区清单的话,则可以使用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」,最後就是输出一些如何设定这个时区的方式了。

设定与监控Chronyd服务

因为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 ~]$

课後练习

  • 请开启VirtualBox并开启「workstation」虚拟机器,并以rockylinux使用者进行登入,并开启终端机。
  • 将此作业系统设定成时区为:「Asia/Taipei」。
  • 设定NTP服务器为:tick.stdtime.gov.tw,并确定此作业系统已经与设定的NTP服务器进行同步了。

<<:  [ Day 20 ] - AJAX

>>:  [Day 24] 第二主餐 pt.3-贺,乔迁aws

半导体布局设计工程师能力监定上课

请问各位大大,小的想去考111年的半导体布局设计工程师能力监定,请问哪里可以有实体或线上课程呢,上完...

初探 OpenTelemetry

为什麽会接触到 OpenTelemetry,算是因为 Log 的追踪关系,在後台上有两三个 Spri...

【Day 17】Django model

续昨天 我们使用 Python 预设的资料库模组-SQLite,昨天讲到的 Database 就会长...

30天程序语言研究

今天是30天程序语言研究的第二十八天,由於最近写unix语言的东西用到很多,所以做了很多笔记,就想说...

用 Python 畅玩 Line bot - 27:爬虫(二)

接续前篇,一般爬虫时抓出的资料量多还没什麽关系,但这次我们是想要让使用者在 line 上使用,一次给...