AlmaLinux 9、Rocky Linux 9 與 CentOS Stream 9 時間管理完全指南

4次閱讀
尚無留言

在企業級的 Linux 環境中,準確和一致的系統時間顯得尤為重要。無論是日誌分析、排程任務、資料庫交易,還是安全性憑證,都高度依賴於精確的時間同步。本文將詳細介紹 AlmaLinux 9、Rocky Linux 9、CentOS Stream 9 及其他 RHEL 衍生版本中時間管理的各種方法與工具。

目錄

  1. Red Hat 家族的時間管理概述
  2. 使用 timedatectl 管理時間
  3. 使用 date 命令管理時間
  4. Chrony:RHEL 系統推薦的時間同步服務
  5. 傳統 NTP 服務的配置與使用
  6. 硬體時鐘管理
  7. 自動化部署中的時間設置
  8. 常見問題排解
  9. SELinux 與時間服務
  10. 參考資料

Red Hat 家族的時間管理概述

AlmaLinux 9、Rocky Linux 9 和 CentOS Stream 9 作為 Red Hat Enterprise Linux (RHEL) 9 的下游衍生版本,繼承了 RHEL 的時間管理架構。這些系統採用 systemd 作為初始化系統,並推薦使用 Chrony 作為主要的時間同步服務。

RHEL 家族時間管理的演變

在 RHEL 系列的發展歷程中,時間管理工具經歷了以下變化:

  • RHEL 6 及更早版本:使用傳統的 ntpd 服務和 date 命令
  • RHEL 7:引入 timedatectl 命令,開始推薦使用 chronyd 服務
  • RHEL 8/9:完全採用 chronyd 作為預設和推薦的時間同步服務

AlmaLinux 9、Rocky Linux 9 與 CentOS Stream 9 的時間管理特點

  • 預設安裝 Chrony 時間同步服務
  • 完整支援 timedatectl 命令
  • 提供與傳統 datehwclock 命令的向後兼容性
  • 增強的 PTP (Precision Time Protocol) 支援
  • 針對虛擬化和容器環境的優化

使用 timedatectl 管理時間

timedatectl 是 systemd 的一部分,提供了全面的時間管理功能,是現代 RHEL 衍生系統中管理時間的首選工具。

基本用法

查看系統時間狀態

timedatectl status

輸出示例:

               Local time: Mon 2025-04-28 15:30:45 CST
           Universal time: Mon 2025-04-28 07:30:45 UTC
                 RTC time: Mon 2025-04-28 07:30:45    
                Time zone: Asia/Shanghai (CST, +0800)   
System clock synchronized: yes                        
              NTP service: active                     
          RTC in local TZ: no                         

設置系統日期和時間

sudo timedatectl set-time "2025-04-28 15:30:00"

設置時區

列出所有可用時區:

timedatectl list-timezones

搜尋特定區域的時區:

timedatectl list-timezones | grep Asia

設置時區:

sudo timedatectl set-timezone Asia/Taipei

啟用或禁用 NTP 同步

啟用 NTP 同步(會自動啟用 chronyd 服務):

sudo timedatectl set-ntp true

禁用 NTP 同步:

sudo timedatectl set-ntp false

RHEL 特有的 timedatectl 功能

檢查目前時間同步服務

在 AlmaLinux 9 和 CentOS Stream 9 中,可以使用以下命令查看當前激活的時間同步服務:

timedatectl show-timesync

調整 RTC 模式

設置硬體時鐘使用 UTC 時間(推薦):

sudo timedatectl set-local-rtc 0

設置硬體時鐘使用本地時間(不推薦,但可以與 Windows 雙啟動系統兼容):

sudo timedatectl set-local-rtc 1

使用 date 命令管理時間

儘管 timedatectl 是現代推薦的工具,date 命令依然是有價值的,尤其是在腳本和自動化任務中。

查看當前時間

date

輸出示例:

Mon Apr 28 15:30:45 CST 2025

以特定格式顯示時間

date "+%Y-%m-%d %H:%M:%S %z"

輸出示例:

2025-04-28 15:30:45 +0800

設置系統時間

sudo date -s "2025-04-28 15:30:00"

RHEL 系統中常用的 date 選項

在 AlmaLinux 和 CentOS 中,以下 date 選項特別有用:

顯示 UTC 時間

date -u

以 ISO 8601 格式顯示時間

date --iso-8601=seconds

輸出示例:

2025-04-28T15:30:45+08:00

從時間戳轉換為可讀時間

date -d @1714349445

時間計算

# 3天後的時間
date -d "+3 days"

# 下個月第一天
date -d "next month" +%Y-%m-01

# 本季度最後一天
date -d "$(date +%Y-%m-01) +3 month -1 day"

Chrony:RHEL 系統推薦的時間同步服務

Chrony 是 AlmaLinux 9 和 CentOS Stream 9 中預設和推薦的時間同步服務,提供比傳統 NTP 守護程序更好的性能和更多功能。

Chrony 的優勢

  • 更快的同步速度
  • 更好地處理間歇性網絡連接
  • 更好地應對系統時鐘漂移
  • 支援硬體時間戳
  • 較低的資源消耗
  • 更好的虛擬機支援

安裝 Chrony

在 AlmaLinux 9、Rocky Linux 9 和 CentOS Stream 9 中,Chrony 通常已預先安裝。如果沒有,可以使用以下命令安裝:

sudo dnf install chrony

Chrony 基本配置

Chrony 的主要配置文件是 /etc/chrony.conf。以下是一些常見的配置選項:

配置 NTP 服務器

編輯配置文件:

sudo vi /etc/chrony.conf

基本配置示例:

# 使用公共 NTP 池服務器
pool pool.ntp.org iburst

# 使用特定區域的 NTP 池服務器
pool asia.pool.ntp.org iburst

# 使用特定 NTP 服務器
server ntp.example.com iburst

選項說明:

  • iburst:加速初始同步
  • burst:當服務器可達時發送多個請求
  • minpollmaxpoll:設置輪詢間隔

允許本地網絡同步

要允許本地網絡中的其他計算機與此伺服器同步:

# 允許 192.168.1.0/24 網絡的計算機同步
allow 192.168.1.0/24

本地時間源配置

如果服務器無法訪問外部 NTP 服務,可以配置為本地參考時鐘:

# 本地參考時鐘,層次為 10
local stratum 10

管理 Chrony 服務

啟動和啟用服務

sudo systemctl start chronyd
sudo systemctl enable chronyd

檢查服務狀態

sudo systemctl status chronyd

檢查同步狀態

使用 chronyc 命令行工具檢查同步狀態:

chronyc tracking

輸出示例:

Reference ID    : 8BAFC43B (ntp.example.com)
Stratum         : 3
Ref time (UTC)  : Mon Apr 28 07:30:45 2025
System time     : 0.000000195 seconds slow of NTP time
Last offset     : +0.000000021 seconds
RMS offset      : 0.000000053 seconds
Frequency       : 6.626 ppm fast
Residual freq   : +0.000 ppm
Skew            : 0.011 ppm
Root delay      : 0.022055530 seconds
Root dispersion : 0.000455368 seconds
Update interval : 1042.2 seconds
Leap status     : Normal

查看時間源

chronyc sources

輸出示例:

MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* ntp.example.com               2   9   377    43  -195ns[-1031ns] +/-   23ms
^+ time.cloudflare.com           3  10   377   120    -1ms[   -1ms] +/-   36ms
^- ntp.other.org                 2   9   377    43   +12ms[  +12ms] +/-   89ms

前綴符號表示:

  • *:當前同步源
  • +:可接受的替代同步源
  • -:排除的時間源
  • ?:連接失敗的時間源
  • x:時鐘被視為偽造

手動觸發同步

sudo chronyc makestep

Chrony 高級配置

記錄與統計

啟用記錄和統計信息:

# 啟用日誌
logdir /var/log/chrony
log measurements statistics tracking

# 啟用統計
driftfile /var/lib/chrony/drift
dumpdir /var/lib/chrony
dumponexit

PTP 硬體時鐘支援

對於需要高精度時間的應用,可以配置 PTP 硬體時鐘:

# 使用 PTP 硬體時鐘作為參考
refclock PHC /dev/ptp0 poll 3 dpoll -2 offset 0

虛擬機優化

在虛擬機環境中,可以使用以下設置提高性能:

# 虛擬機環境優化
makestep 1.0 3
maxchange 1000 1 1

傳統 NTP 服務的配置與使用

雖然 Chrony 是 AlmaLinux 9 和 CentOS Stream 9 中的預設選擇,但在某些情況下,您可能需要使用傳統的 NTP 服務。

安裝 NTP

sudo dnf install ntp

基本配置

編輯 /etc/ntp.conf 文件:

sudo vi /etc/ntp.conf

配置示例:

# 使用公共 NTP 池服務器
server 0.pool.ntp.org iburst
server 1.pool.ntp.org iburst
server 2.pool.ntp.org iburst
server 3.pool.ntp.org iburst

# 本地網絡訪問控制
restrict default nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict ::1
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

管理 NTP 服務

sudo systemctl start ntpd
sudo systemctl enable ntpd
sudo systemctl status ntpd

查看同步狀態

ntpq -p

硬體時鐘管理

在 AlmaLinux 9 和 CentOS Stream 9 中,hwclock 命令用於管理硬體時鐘(RTC)。

查看硬體時鐘時間

sudo hwclock --show

設置硬體時鐘

sudo hwclock --set --date="2025-04-28 15:30:00"

同步系統時鐘與硬體時鐘

將系統時間同步到硬體時鐘:

sudo hwclock --systohc

將硬體時鐘同步到系統時間:

sudo hwclock --hctosys

硬體時鐘選項

在 RHEL 系統中,hwclock 有一些特別有用的選項:

# 查看是否使用 UTC 或本地時間
sudo hwclock --verbose

# 使用 UTC 時間設置硬體時鐘
sudo hwclock --systohc --utc

# 使用本地時間設置硬體時鐘
sudo hwclock --systohc --localtime

# 調整時鐘漂移
sudo hwclock --adjust

自動化部署中的時間設置

在 AlmaLinux 9、Rocky Linux 9 和 CentOS Stream 9 的自動化部署中,時間設置是關鍵步驟之一。

使用 Kickstart 配置時間

在 Kickstart 文件中配置時間設置:

# 設置時區
timezone Asia/Taipei --utc

# 啟用 NTP
services --enabled=chronyd

使用 Ansible 管理時間

Ansible Playbook 示例:

---
- name: 配置系統時間
  hosts: all
  become: yes
  tasks:
    - name: 安裝 chrony
      dnf:
        name: chrony
        state: present

    - name: 設置時區
      timezone:
        name: Asia/Taipei

    - name: 配置 chrony 服務器
      lineinfile:
        path: /etc/chrony.conf
        regexp: '^pool '
        line: 'pool ntp.example.com iburst'
      notify: restart chronyd

    - name: 啟用並啟動 chrony
      systemd:
        name: chronyd
        state: started
        enabled: yes

  handlers:
    - name: restart chronyd
      systemd:
        name: chronyd
        state: restarted

常見問題排解

系統時間不同步

如果系統時間不同步,請按照以下步驟排除問題:

  1. 檢查時間同步服務是否運行: sudo systemctl status chronyd
  2. 檢查時間源狀態: chronyc sources
  3. 檢查網絡連接: ping pool.ntp.org
  4. 查看 chrony 日誌: sudo journalctl -u chronyd
  5. 手動強制同步: sudo chronyc makestep

時區問題

如果時區設置不正確:

  1. 確認當前時區設置: timedatectl status
  2. 列出可用時區: timedatectl list-timezones | grep Asia
  3. 設置正確的時區: sudo timedatectl set-timezone Asia/Taipei

硬體時鐘與系統時鐘不一致

如果重啟後時間不正確:

  1. 檢查硬體時鐘模式: timedatectl | grep "RTC in local TZ"
  2. 同步系統時間到硬體時鐘: sudo hwclock --systohc
  3. 檢查 BIOS 時間設置。

Chrony 同步問題

如果 Chrony 無法同步時間:

  1. 檢查防火牆設置: sudo firewall-cmd --list-all
  2. 如果需要,允許 NTP 通過防火牆: sudo firewall-cmd --add-service=ntp --permanent sudo firewall-cmd --reload
  3. 檢查 chrony 配置文件: sudo cat /etc/chrony.conf
  4. 使用調試模式重啟 chronyd: sudo systemctl stop chronyd sudo chronyd -d

SELinux 與時間服務

AlmaLinux 9 和 CentOS Stream 9 預設啟用 SELinux,這可能會影響時間服務的運作。

檢查 SELinux 相關問題

sudo ausearch -m avc -c chronyd

設置正確的 SELinux 上下文

# 對於自定義的 chrony 日誌目錄
sudo semanage fcontext -a -t chronyd_var_log_t "/var/log/chrony(/.*)?"
sudo restorecon -Rv /var/log/chrony

# 允許 chronyd 連接到 NTP 端口
sudo setsebool -P chronyd_connect_network on

時間服務的 SELinux 布爾值

# 列出與時間相關的布爾值
sudo getsebool -a | grep chrony

# 設置特定布爾值
sudo setsebool -P chronyd_connect_network on

參考資料

  1. AlmaLinux 9 官方文檔:系統管理
  2. CentOS Stream 9 官方文檔
  3. Red Hat Enterprise Linux 9 文檔:配置系統時間和日期
  4. Chrony 官方文檔
  5. NTP 官方文檔
  6. Red Hat Enterprise Linux 9 文檔:使用 Ansible 自動化系統管理
  7. Rocky Linux 9 文檔:時間同步
  8. Linux man 手冊:timedatectl(1)
  9. Linux man 手冊:chrony.conf(5)
  10. Linux man 手冊:chronyc(1)

本文詳細介紹了 AlmaLinux 9、Rocky Linux 9、CentOS Stream 9 及其他 RHEL 衍生版本中的時間管理方法。從基本的時間查看和設置,到配置高精度時間同步服務,再到針對虛擬化環境和自動化部署的優化,都提供了全面而深入的指導。通過遵循這些最佳實踐,您可以確保 RHEL 系列系統中的時間服務運行穩定且精確。

正文完
 0
評論(尚無留言)