Linux - CentOS7上的時間同步


1. 時區的概念

1.1 時區簡介

  地球是自西向東自轉,東邊比西邊先看到太陽,東邊的時間也比西邊的早。東邊時刻與西邊時刻的差值不僅要以時計,而且還要以分和秒來計算,這給人們帶來不便。所以為了克服時間上的混亂,1884年在華盛頓召開的一次國際經度會議(又稱國際子午線會議)上,規定將全球划分為24個時區(東、西各12個時區)。規定英國(格林尼治天文台舊址)為中時區(零時區)、東1-12區,西1-12區。每個時區橫跨經度15度,時間正好是1小時。最后的東、西第12區各跨經度7.5度,以東、西經180度為界。每個時區的中央經線上的時間就是這個時區內統一采用的時間,稱為區時,相鄰兩個時區的時間相差1小時。例如,中國東8區的時間總比泰國東7區的時間早1小時,而比日本東9區的時間遲1小時。因此,出國旅行的人,必須隨時調整自己的手表,才能和當地時間相一致。凡向西走,每過一個時區,就要把表撥慢1小時(比如2點撥到1點);凡向東走,每過一個時區,就要把表撥快1小時(比如1點撥到2點)。並且規定英國(格林尼治天文台舊址)為本初子午線,即零時(24時)經線。

  實際上,世界上不少國家和地區都不嚴格按時區來計算時間。但為了在全國范圍內采用統一的時間,一般都把某一個時區的時間作為全國統一采用的時間。例如,中國把首都北京所在的東8區的時間作為全國統一的時間,稱為北京時間。又例如,法國、荷蘭和比利時等國,雖然地處中時區,但為了和歐洲大多數國家時間相一致,則采用東1區的時間。

1.2 世界各城市時間查詢

  查詢網站:https://www.timeanddate.com/

2. GMT、UTC、CST、DST 時間

2.1 UTC

   整個地球分為二十四時區,每個時區都有自己的本地時間。在國際無線電通信場合,為了統一起見,使用一個統一的時間,稱為通用協調時(UTC, Universal Time Coordinated)。

2.2 GMT

   格林威治標准時間 (Greenwich Mean Time)指位於英國倫敦郊區的皇家格林尼治天文台的標准時間,因為本初子午線被定義在通過那里的經線。(UTC與GMT時間基本相同,本文中不做區分)

2.3 CST

   中國標准時間 (China Standard Time)  UTC = GMT = CST - 8 

2.4 DST

   夏令時(Daylight Saving Time) 指在夏天太陽升起的比較早時,將時間撥快一小時,以提早日光的使用。(中國不使用)

3. 硬件時間和系統時間

3.1 硬件時間

  RTC(Real-Time Clock)或CMOS時間,一般在主板上靠電池供電,服務器斷電后仍然繼續運行。僅保存日期時間數值,無法保存時區和夏令時設置。

3.2 系統時間

  一般在服務器啟動時復制RTC時間,之后獨立運行,保存了時間、時區和夏令時設置。

4. CentOS7上的時間管理命令:timedatectl

4.1 timedatectl 選項

$ timedatectl --help
timedatectl [OPTIONS...] COMMAND ...

Query or change system time and date settings.

  -h --help                Show this help message
     --version             Show package version
     --no-pager            Do not pipe output into a pager
     --no-ask-password     Do not prompt for password
  -H --host=[USER@]HOST    Operate on remote host
  -M --machine=CONTAINER   Operate on local container
     --adjust-system-clock Adjust system clock when changing local RTC mode

Commands:
  status                   Show current time settings
  set-time TIME            Set system time
  set-timezone ZONE        Set system time zone
  list-timezones           Show known time zones
  set-local-rtc BOOL       Control whether RTC is in local time
  set-ntp BOOL             Control whether NTP is enabled

 

4.2 timedatectl 案例

查看當前系統時間、時區

$ timedatectl 
      Local time: Thu 2018-10-11 13:03:04 CST
  Universal time: Thu 2018-10-11 05:03:04 UTC
        RTC time: Thu 2018-10-11 01:17:11
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: no
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

$ timedatectl status
      Local time: Thu 2018-10-11 13:03:09 CST
  Universal time: Thu 2018-10-11 05:03:09 UTC
        RTC time: Thu 2018-10-11 01:17:16
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: no
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

列出全世界所有的時區

# timedatectl list-timezones | grep Asia
...
Asia/Hong_Kong
Asia/Shanghai
Asia/Taipei
Asia/Urumqi ...

設置時區

# 方法1:
# 將時區設置為上海 $ timedatectl set
-timezone Asia/Shanghai

# 方法2:
# 直接修改符號鏈接
$ rm /etc/localtime
$ ln -s ../usr/share/zoneinfo/Asia/Shanghai /etc/localtime
 

設置時間

# 方法1:使用timedatectl,NTP enabled: yes時,使用了NTP服務器自動同步時間,若堅持要手動修改時間,先timedatectl set-ntp no。
# 設置日期和時間
$ timedatectl set-time '2018-10-11 09:00:00'
# 設置日期
$ timedatectl set-time '2018-10-11'
# 設置時間
$ timedatectl set-time '09:00:00'

# 方法2:使用date
$ date -s '2018-10-11 09:00:00'

同步系統時間到硬件時間

# 方法1:不建議硬件時間隨系統時間變化
# 設置硬件時間隨系統時間變化
$ timedatectl set-local-rtc 1
# 設置硬件時間不隨系統時間變化
$ timedatectl set-local-rtc 0

# 方法2:
$ hwclock --systohc

是否啟用自動同步時間

# 啟用|停用自動同步時間
$ timedatectl set-ntp yes|no

# 上面的命令其實是啟用、停用時間服務器,若安裝了chrony服務,則等同於對該服務啟停,若只安裝了ntp,則是對ntp服務啟停。
# 對chrony服務啟停
$ systemctl start|stop chronyd
# 對ntp服務啟停
$ systemctl start|stop ntpd

 

5. 自動同步時間:服務ntp、chrony,命令ntpdate

  CentOS7之前采用ntp服務自動同步時間,CentOS7推薦使用chrony同步時間,當然ntp仍然可以使用,chrony官網列舉了諸多chrony優於ntp的功能(ntp與chrony的對比:https://chrony.tuxfamily.org/comparison.html)。

  此外我們若要立刻將系統時間同步為NTP服務時間,使用ntpdate命令,也可以配置計划任務定期使用ntpdate命令同步時間,從而就不用使用ntp或chrony服務,減少監聽的端口,增加系統安全性。

5.1 ntp的安裝配置

安裝ntp

$ yum -y install ntp

配置ntp同步阿里雲時間服務器

$ vim /etc/ntp.conf
...
server ntp1.aliyun.com
server ntp2.aliyun.com
server ntp3.aliyun.com
#server 0.centos.pool.ntp.org iburst
...

啟動ntp服務器

$ systemctl start ntpd

 

5.2 chrony的安裝配置

安裝chrony

$ yum -y install chrony

配置chrony

$ vim /etc/chrony.conf
server ntp1.alyun.com
server ntp2.alyun.com
server ntp3.alyun.com
#server 0.centos.pool.ntp.org iburst
...

啟動chrony

$ systemctl start chronyd

 

5.3 配置計划任務,使用ntpdate同步時間

# 啟動並開機啟動計划任務cron
$ systemctl start crond
$ systemctl enable crond

# 配置計划任務,每5分鍾同步一次
$ crontab -e
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com

 

6. 參考文章

[博客]   centos7之關於時間和日期以及時間同步的應用  作者:Charles.L

[百科] 搜狗百科時區的介紹

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM