「Linux」- 同步系統時間(基於 systemd 管理) @20210418

在較新的 Linux 發行版中,一般使用 timedatectl 設置操做系統時間。網絡

查看當前時鐘設置(查看)

使用 timedatectl 查看時間同步狀態:ide

# timedatectl
      Local time: Mon 2020-05-25 10:58:29 EDT
  Universal time: Mon 2020-05-25 14:58:29 UTC
        RTC time: Mon 2020-05-25 14:58:28
       Time zone: America/New_York (EDT, -0400)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: yes
 Last DST change: DST began at
                  Sun 2020-03-08 01:59:59 EST
                  Sun 2020-03-08 03:00:00 EDT
 Next DST change: DST ends (the clock jumps one hour backwards) at
                  Sun 2020-11-01 01:59:59 EDT
                  Sun 2020-11-01 01:00:00 EST

選擇並設置時區(時區)

時區信息由 NANA 維護,可是時區採用地區命名,即便用在時區中的某個地區表明這個時區。這帶來的問題的就是咱們不知道使用哪一個地區名,好比究竟是 Asia/Beijing 仍是 Asia/Shanghai 表明咱們的時區。使用 tzselect 命令,根據提示進行選擇,最後能夠肯定要使用的時區。該命令用於肯定時區,可是不會修改時區。操作系統

使用 timedatectl set-timezone 設置:同步

timedatectl set-timezone Asiz/Shanghai

直接修改時間信息(時間)

使用 timedatectl set-time 設置,時間使用 「YYYY-MM-DD hh:mm:ss」 格式,日期能夠省略:it

timedatectl set-time "09:00:00"

開啓時間自動同步(自動同步)

將 set-ntp 設置爲 yes 便可開啓時間自動同步:io

timedatectl set-ntp yes

Failed to set ntp: NTP not supported.

在執行 timedatectl set-ntp yes 命令時,產生 Failed to set ntp: NTP not supported. 錯誤。編譯

題外話:有些東西(UNIX System V),使用起來麻煩,可是排查問題簡單。有些東西(systemd),使用起來簡單,可是排查問題複雜。ast

使用 timedatectl set-ntp 背後

timedatectl => systemd-timedated => systemd-timesyncd => chronyd.serviceclass

1)當使用 timedatectl set-ntp 命令時,命令 timedatectl 與 systemd-timedated 交互,
2)服務 systemd-timedated 到 ntp-units.d/ 查找用於時間同步的服務,多是 chronyd 服務(或者其餘服務)
3)若是是 chronyd 服務,則 systemd-timedated 將 start 並 enable chronyd 服務,時間將自動同步變量

4)若是是 systemd-timesyncd 服務,還會檢查 $SYSTEMD_TIMEDATED_NTP_SERVICES 環境變量列出的時間同步服務,
5)若是沒有定義該環境變量,則直接使用 systemd-timesyncd 同步時間。

然而實際狀況永遠不會這麼簡單…………

在 Debian 10 中

根據 Debian 10 手冊,指令 set-ntp 控制網絡時間同步服務是否激活並啓用(若是可用),因此該指令的做用是啓用某個時間同步服務。

那麼它會啓用哪一個時間同步服務呢?
1)在 systemd-timedated.service 中,環境變量 $SYSTEMD_TIMEDATED_NTP_SERVICES 列出可用的時間服務,
2)而 set-ntp yes 將 enablestart 列出的第一個可用的服務,
3)而 set-ntp no 將禁用全部的列出的時間服務。
4)若是沒有設置 $SYSTEMD_TIMEDATED_NTP_SERVICES 環境變量,則使用 systemd-timesyncd.service(8) 服務

=> 解決方案:所以咱們須要安裝 chronyd 服務(或者 systemd-timesyncd 服務)來進行時間同步。

在 CentOS 中

根據 Systemd TimeSyncd 與 CentOS 7.2 Minimal Time synchronization timedated and/or ntpd/chrony 的描述,RedHat 在編譯 systemd 時,移除 systemd-timesyncd 特徵。所以對於 CentOS 7.x 系列,沒法使用 systemd-timesyncd 服務。

=> 解決方案:所以咱們須要安裝 chronyd 服務來進行時間同步。

 

參考文獻

CentOS / RHEL 7 : Configuring NTP using chronyChrony client do not change system and hardware datesystemd-timedated.servicesystemd-timesyncd.service

相關文章
相關標籤/搜索