設定您 Linux 執行個體的時間 - Amazon Elastic Compute Cloud

設定您 Linux 執行個體的時間

對許多伺服器任務和程序而言,一致且精準的時間參考很重要。大部分系統日誌包含的時間戳記可用來判斷問題發生在何時,以及事件發生的順序。如果您使用 AWS CLI 或 AWS 開發套件從您的執行個體提出請求,這些工具會代您簽署請求。如果您執行個體的日期和時間未正確設定,簽章中的日期可能與請求的日期不符,AWS 會拒絕該請求。

Amazon 提供 Amazon Time Sync Service,該服務可從所有 EC2 執行個體存取,且同時由其他 AWS 服務 使用。此服務在每個 AWS 區域 中使用一組與衛星連線的原子參考時鐘,透過網路時間協定 (NTP) 提供對國際標準時間 (UTC) 全球標準的最新精準時間讀數。Amazon Time Sync Service 會自動消除新增至 UTC 的任何閏秒。

可透過 NTP 在 169.254.169.123 IPv4 地址或 fd00:ec2::123 IPv6 地址取得 Amazon Time Sync Service。IPv6 地址只能在 建置在 Nitro 系統上的執行個體 上存取。您的執行個體不必存取網際網路,您也不必設定安全群組規則或網路 ACL 規則允許存取。最新版的 Amazon Linux 2 和 Amazon Linux AMI 預設會與 Amazon Time Sync Service 同步。

對於備份到 Amazon Time Sync 連結本機服務,以及將 Amazon EC2 以外的資源連接到 Amazon Time Sync Service,您可以使用位於 time.aws.com 的 Amazon Time Sync Public NTP 集區。Amazon Time Sync Public NTP,例如 Amazon Time Sync Service,會自動消除新增至 UTC 的任何閏秒。Amazon Time Sync Service Public NTP 在全球範圍內由我們在每個 AWS 區域 中與衛星連線的原子參考時鐘支援。

使用 chrony 用戶端,利用下列程序在您的執行個體上設定 Amazon Time Sync Service。或者,您也可以使用外部 NTP 來源。如需 NTP 和公有時間來源的詳細資訊,請參閱 http://www.ntp.org/。執行個體需要存取網際網路才能讓外部 NTP 時間來源運作。

對於 Windows 執行個體,請參閱設定 Windows 執行個體的時間

使用 Amazon Time Sync Public NTP 為用戶端設定時間

您可以將用戶端機器設定為使用 Amazon Time Sync。

若要為 Apple macOS 設定 Amazon Time Sync Public NTP
  1. 在用戶端機器上,開啟 System Preferences (系統偏好設定)。

  2. 選擇 Date & Time (日期與時間),然後選擇 Date & Time (日期與時間) 標籤。

  3. 若要進行變更,請選擇鎖定圖示,然後在出現提示時輸入您的密碼。

  4. 對於 Set date and time automatically (自動設定日期與時間),輸入 time.aws.com

若要設定 Linux (chrony 或 ntpd) 的 Amazon Time Sync Public NTP
  1. 使用您最愛的文字編輯器編輯 /etc/chrony/chrony.conf (如果您使用 chrony) 或 /etc/ntp.conf (如果您使用 ntpd),如下所示:

    1. 若要防止執行個體嘗試混合已塗抹和未塗抹的伺服器,請刪除或註解以 server 開頭的行。

      重要

      為了確保您的執行個體保持與本機 Amazon Time Sync Service 的連線,請勿編輯以下行。

      server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4
    2. 新增以下這一行。

      pool time.aws.com iburst
  2. 選擇 NAME (名稱)。

  3. 使用以下命令重新啟動常駐程式。

    • chrony

      sudo service chrony force-reload
    • ntpd

      sudo service ntp reload
  4. 使用您喜歡的文本編輯器編輯 systemd/timesyncd 檔案,並將 [Time] 區塊的內容設定為以下內容。透過將 Amazon Time Sync Service Public NTP 設定為後援伺服器,它將被選為唯一的 NTP 伺服器。這可防止不小心在已塗抹和未塗抹的時間伺服器之間移動。

    [Time] NTP=FallbackNTP=time.aws.com
  5. 以具有適當許可的使用者身分使用以下命令重新啟動 systemd-timesyncd

    systemctl restart systemd-timesyncd.service
  6. 確認您的系統正在透過以下命令使用 Amazon Time Sync Public NTP 集區。

    timedatectl show-timesync | grep ServerName

    如果成功設定,則輸出將顯示如下:

    ServerName=time.aws.com

設定具有 IPv4 地址的 EC2 執行個體的時間

本節說明如何根據 Linux 發行版的類型,設定具有 IPv4 地址的 EC2 執行個體的時間。

在 Amazon Linux AMI 上設定 Amazon Time Sync Service

注意

在 Amazon Linux 2 上,chrony 已安裝並設定為使用 Amazon Time Sync Service IP 地址。

您必須使用 Amazon Linux AMI,編輯 chrony 組態檔,以新增 Amazon Time Sync Service 的伺服器項目。

設定您的執行個體使用 Amazon Time Sync Service
  1. 連線到您的執行個體,然後解除安裝 NTP 服務。

    [ec2-user ~]$ sudo yum erase 'ntp*'
  2. 安裝 chrony 套裝服務。

    [ec2-user ~]$ sudo yum install chrony
  3. 使用文字編輯器 (例如 /etc/chrony.confvim) 開啟 nano 檔案。確認檔案是否包含下列程式碼行:

    server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4

    如有此程式碼,則 Amazon Time Sync Service 已設定,您可前往下一個步驟。如果沒有,請將該行程式碼新增在檔案中已有之任何其他 serverpool 陳述式之後,然後儲存您的變更。

  4. 重新啟動 chrony 協助程式 (chronyd)。

    [ec2-user ~]$ sudo service chronyd restart
    Starting chronyd: [ OK ]
    注意

    在 RHEL 和 CentOS (最新為 6 版) 上,服務名稱為 chrony,而不是 chronyd

  5. 使用 chkconfig 命令設定 chronyd 在每次系統開機時啟動。

    [ec2-user ~]$ sudo chkconfig chronyd on
  6. 確認 chrony 是否使用 169.254.169.123 IP 地址來同步時間。

    [ec2-user ~]$ chronyc sources -v
    210 Number of sources = 7 .-- 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 =============================================================================== ^* 169.254.169.123 3 6 17 43 -30us[ -226us] +/- 287us ^- ec2-12-34-231-12.eu-west> 2 6 17 43 -388us[ -388us] +/- 11ms ^- tshirt.heanet.ie 1 6 17 44 +178us[ +25us] +/- 1959us ^? tbag.heanet.ie 0 6 0 - +0ns[ +0ns] +/- 0ns ^? bray.walcz.net 0 6 0 - +0ns[ +0ns] +/- 0ns ^? 2a05:d018:c43:e312:ce77:> 0 6 0 - +0ns[ +0ns] +/- 0ns ^? 2a05:d018:dab:2701:b70:b> 0 6 0 - +0ns[ +0ns] +/- 0ns

    在傳回的輸出中,^* 表示偏好的時間來源。

  7. 確認時間同步指標是否由 chrony 回報。

    [ec2-user ~]$ chronyc tracking
    Reference ID : A9FEA97B (169.254.169.123) Stratum : 4 Ref time (UTC) : Wed Nov 22 13:18:34 2017 System time : 0.000000626 seconds slow of NTP time Last offset : +0.002852759 seconds RMS offset : 0.002852759 seconds Frequency : 1.187 ppm fast Residual freq : +0.020 ppm Skew : 24.388 ppm Root delay : 0.000504752 seconds Root dispersion : 0.001112565 seconds Update interval : 64.4 seconds Leap status : Normal

在 Ubuntu 上設定 Amazon Time Sync Service

您必須編輯 chrony 組態檔,新增 Amazon Time Sync Service 的伺服器項目。

設定您的執行個體使用 Amazon Time Sync Service
  1. 連線至您的執行個體,然後使用 apt 來安裝 chrony 套件。

    ubuntu:~$ sudo apt install chrony
    注意

    如有必要,請執行 sudo apt update 先更新您的執行個體。

  2. 使用文字編輯器 (例如 /etc/chrony/chrony.confvim) 開啟 nano 檔案。將下列程式碼新增在檔案中已有之任何其他 serverpool 的陳述式之前,然後儲存您的變更:

    server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4
  3. 重新啟動 chrony 服務。

    ubuntu:~$ sudo /etc/init.d/chrony restart
    Restarting chrony (via systemctl): chrony.service.
  4. 確認 chrony 是否使用 169.254.169.123 IP 地址來同步時間。

    ubuntu:~$ chronyc sources -v
    210 Number of sources = 7 .-- 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 =============================================================================== ^* 169.254.169.123 3 6 17 12 +15us[ +57us] +/- 320us ^- tbag.heanet.ie 1 6 17 13 -3488us[-3446us] +/- 1779us ^- ec2-12-34-231-12.eu-west- 2 6 17 13 +893us[ +935us] +/- 7710us ^? 2a05:d018:c43:e312:ce77:6 0 6 0 10y +0ns[ +0ns] +/- 0ns ^? 2a05:d018:d34:9000:d8c6:5 0 6 0 10y +0ns[ +0ns] +/- 0ns ^? tshirt.heanet.ie 0 6 0 10y +0ns[ +0ns] +/- 0ns ^? bray.walcz.net 0 6 0 10y +0ns[ +0ns] +/- 0ns

    在傳回的輸出中,以 ^* 開頭的行表示偏好的時間來源。

  5. 確認時間同步指標是否由 chrony 回報。

    ubuntu:~$ chronyc tracking
    Reference ID : 169.254.169.123 (169.254.169.123) Stratum : 4 Ref time (UTC) : Wed Nov 29 07:41:57 2017 System time : 0.000000011 seconds slow of NTP time Last offset : +0.000041659 seconds RMS offset : 0.000041659 seconds Frequency : 10.141 ppm slow Residual freq : +7.557 ppm Skew : 2.329 ppm Root delay : 0.000544 seconds Root dispersion : 0.000631 seconds Update interval : 2.0 seconds Leap status : Normal

在 SUSE Linux 上設定 Amazon Time Sync Service

https://software.opensuse.org/package/chrony 安裝 chrony。

使用文字編輯器 (例如 /etc/chrony.confvim) 開啟 nano 檔案。確認檔案是否包含下列程式碼行:

server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4

如果此程式碼不存在,請新增它。將任何其他伺服器或集區的程式碼行變更為註解。開啟 yast 並啟用 chrony 服務。

設定具有 IPv6 地址的 EC2 執行個體的時間

本節說明如果您要為使用 IPv6 地址的 EC2 執行個體設定 Amazon Time Sync Service,在 設定具有 IPv4 地址的 EC2 執行個體的時間 中說明的程序有何不同。它不會說明整個 Amazon Time Sync Service 組態程序。IPv6 地址只能在 建置在 Nitro 系統上的執行個體 上存取。

注意

我們不建議在您的 chrony.conf 檔案中同時使用 IPv4 地址和 IPv6 地址項目。IPv4 和 IPv6 NTP 封包來自您的執行個體的相同本機伺服器。如果您同時使用來自 IPv4 端點的某些封包和來自 IPv6 端點的某些封包,則可能會收到混合結果。

根據您使用的 Linux 發行版,當您到達編輯 chrony.conf 檔案的步驟時,您將使用 Amazon Time Sync Service 的 IPv6 端點 (fd00:ec2::123),而不是 IPv4 端點 (169.254.169.123):

server fd00:ec2::123 prefer iburst minpoll 4 maxpoll 4

儲存檔案,並確認 chrony 是否使用 fd00:ec2::123 IPv6 地址來同步時間:

[ec2-user ~]$ chronyc sources -v

在輸出中,如果您看到 fd00:ec2::123 IPv6 地址,則組態已完成。

變更 Amazon Linux 的時區

Amazon Linux 執行個體預設為 UTC (國際標準時間) 時區。您可以將執行個體上的時間變更為當地時間或網路中的另一個時區。

重要

此資訊適用於 Amazon Linux。如需其他分發的詳細資訊,請參閱其特定文件。

變更 Amazon Linux 2023 或 Amazon Linux 2 執行個體上的時區
  1. 檢視系統目前的時區設定。

    [ec2-user ~]$ timedatectl
  2. 列出可用的時區。

    [ec2-user ~]$ timedatectl list-timezones
  3. 設定選擇的時區。

    [ec2-user ~]$ sudo timedatectl set-timezone America/Vancouver
  4. (選用) 再次執行 timedatectl 命令確認目前的時區已更新為新的時區。

    [ec2-user ~]$ timedatectl
變更 Amazon Linux 執行個體上的時區
  1. 找出執行個體使用的時區。/usr/share/zoneinfo 目錄包含時區資料檔案的階層。瀏覽該位置的目錄結構尋找您時區的檔案。

    [ec2-user ~]$ ls /usr/share/zoneinfo Africa Chile GB Indian Mideast posixrules US America CST6CDT GB-Eire Iran MST PRC UTC Antarctica Cuba GMT iso3166.tab MST7MDT PST8PDT WET Arctic EET GMT0 Israel Navajo right W-SU ...

    此位置有些項目是目錄 (例如 America),這些目錄包含特定城市的時區檔案。找出用於執行個體的所在城市 (或所在時區的城市)。

  2. 使用新的時區更新 /etc/sysconfig/clock 檔案。在此範例中,我們使用洛杉磯的時區資料檔案:/usr/share/zoneinfo/America/Los_Angeles

    1. 使用您喜愛的文字編輯器 (例如 /etc/sysconfig/clockvim) 開啟 nano 檔案。您需要使用 sudo 搭配編輯器命令,因為 /etc/sysconfig/clock 的擁有者是 root

      [ec2-user ~]$ sudo nano /etc/sysconfig/clock
    2. 找到 ZONE 項目,將它變更為時區檔案 (省略路徑的 /usr/share/zoneinfo 區段)。例如,若要變更至洛杉磯,請將 ZONE 項目變更成:

      ZONE="America/Los_Angeles"
      注意

      UTC=true 項目不要變更成其他值。此項目用於硬體時鐘,當您在執行個體上設定不同時區時不需要調整。

    3. 儲存檔案,然後結束文字編輯器。

  3. 建立 /etc/localtime 和您時區檔案之間的符號連結,以便執行個體參考本機時間資訊時尋找時間檔案。

    [ec2-user ~]$ sudo ln -sf /usr/share/zoneinfo/America/Los_Angeles /etc/localtime
  4. 重新開機系統以在所有服務和應用程式中挑選新的時區資訊。

    [ec2-user ~]$ sudo reboot
  5. (選用) 使用 date 命令確認目前的時區已更新為新的時區。目前的時區會出現在輸出中。在下列範例中,目前的時區是 PDT,它指的是洛杉磯時區。

    [ec2-user ~]$ date Sun Aug 16 05:45:16 PDT 2020

比較時間戳記

如果您使用的是 Amazon Time Sync Service,則可以將 Amazon EC2 執行個體上的時間戳記與 ClockBound 進行比較,以判定事件的真實時間。ClockBound 會測量 EC2 執行個體的時鐘準確度,並允許您檢查給定的時間戳記相對於執行個體的目前時鐘是過去還是未來。此資訊對於判斷 EC2 執行個體之間事件和交易的順序和一致性非常有用,而且與每個執行個體的地理位置無關。

ClockBound 是一種開放原始碼常駐程式和程式庫。若要進一步了解 ClockBound (包括安裝指示),請參閱 GitHub 上的 ClockBound