參考:Systems Manager 的 Cron 和 Rate 表達式 - AWS Systems Manager

參考:Systems Manager 的 Cron 和 Rate 表達式

當您建立 AWS Systems Manager 維護時段或 State Manager 關聯時,您可以指定應執行時段或關聯的排程。State Manager 是 AWS Systems Manager 的功能。您可以將排程指定為時間類型的項目 (稱為「cron 表達式」),或頻率類型的項目 (稱為「rate 表達式」)。

當您建立關聯或維護時段時,可以使用國際標準時間 (UTC) 格式指定時間戳記,以便在指定的時間執行一次。維護時段也僅支援 CRON 表達式的「排程偏移」。排程偏移是在執行維護時段之前,在 CRON 表達式所指定的日期和時間之後等待的天數。例如,以下 CRON/Rate 表達式會排定維護時段,在每個月的第三個星期二晚上 11:30 執行:

cron(30 23 ? * TUE#3 *)

如果排程偏移為 2,則維護時段會等到兩天後在晚上 11:30 執行。

注意

如果您使用 Cron 表達式來建立維護時段,且其目標日期是在目前期間中已經過去的日期,但新增的排程偏移落在未來日期,則維護時段將不會在該期間內執行。它將在其次期間生效。例如,如果您指定的 Cron 表達式是要在昨天執行維護時段,並新增兩天的排程偏移,則維護時段將不會在明天執行。

當您以編寫程式的方式或使用命令列工具 (例如 AWS Command Line Interface (AWS CLI)) 建立關聯或維護時段時,必須以格式正確且有效的 Cron 或 Rate 表達式 (或維護時段的時間戳記) 指定排程參數。

當您使用 AWS Systems Manager 主控台來建立維護時段或關聯時,您可以使用有效的 Cron 或 Rate 表達式指定排程。您也可以利用使用者界面中的工具,簡化建立排程的程序。

維護時段範例

若要使用 AWS CLI 建立維護時段,您需要在其中包含具有 Cron 或 Rate 表達式,或是時間戳記的 --schedule 參數。下列的範例在本機 Linux 機器上使用 AWS CLI。

aws ssm create-maintenance-window \ --name "My-Cron-Maintenance-Window" \ --allow-unassociated-targets \ --schedule "cron(0 16 ? * TUE *)" \ --schedule-timezone "America/Los_Angeles" \ --start-date 2021-01-01T00:00:00-08:00 \ --end-date 2021-06-30T00:00:00-08:00 \ --duration 4 \ --cutoff 1
aws ssm create-maintenance-window \ --name "My-Cron-Offset-Maintenance-Window" \ --allow-unassociated-targets \ --schedule "cron(30 23 ? * TUE#3 *)" \ --duration 4 \ --cutoff 1 \ --schedule-offset 2
aws ssm create-maintenance-window \ --name "My-Rate-Maintenance-Window" \ --allow-unassociated-targets \ --schedule "rate(7 days)" \ --duration 4 \ --schedule-timezone "America/Los_Angeles" \ --cutoff 1
aws ssm create-maintenance-window \ --name "My-TimeStamp-Maintenance-Window" \ --allow-unassociated-targets \ --schedule "at(2021-07-07T13:15:30)" \ --duration 4 \ --schedule-timezone "America/Los_Angeles" \ --cutoff 1

關聯範例

若要使用 State Manager 建立 AWS CLI 關聯,您必須以 Cron 或 Rate 表達式包含 --schedule-expression 參數。下列的範例在本機 Linux 機器上使用 AWS CLI。

aws ssm create-association \ --association-name "My-Cron-Association" \ --schedule-expression "cron(0 2 ? * SUN *)" \ --targets Key=tag:ServerRole,Values=WebServer \ --name AWS-UpdateSSMAgent
aws ssm create-association \ --association-name "My-Rate-Association" \ --schedule-expression "rate(7 days)" \ --targets Key=tag:ServerRole,Values=WebServer \ --name AWS-UpdateSSMAgent
aws ssm create-association \ --association-name "My-Rate-Association" \ --schedule-expression "at(2020-07-07T15:55:00)" \ --targets Key=tag:ServerRole,Values=WebServer \ --name AWS-UpdateSSMAgent \ --apply-only-at-cron-interval
注意

根據預設,當您建立新的關聯時,系統會在建立該關聯後立即執行,然後根據您指定的排程。指定 --apply-only-at-cron-interval,以便不會在您建立關聯之後立即執行。此參數不支援 Rate 表達式。

有關 Cron 和 Rate 運算式的一般資訊

Systems Manager 的 Cron 表達式有六個必要欄位。第七個欄位 Seconds (cron 運算式中的第一個) 是選用的。欄位以空格隔開。

Cron 表達式範例
分鐘 小時 月中的日 週中的日 意義
0 10 * * ? * 在每天上午 10:00 (UTC) 執行
15 12 * * ? * 在每天下午 12:15 (UTC) 執行
0 18 ? * MON-FRI * 在每週一至週五下午 6:00 (UTC) 執行
0 8 1 * ? * 在每個月第 1 天上午 8:00 (UTC) 執行

支援的值

下表顯示支援的必要 cron 項目的值。

注意

Cron 表達式關聯不支援所有這些值。如需相關資訊,請參閱 關聯的 Cron 與 Rate 運算式

Cron 運算式支援的值
欄位 萬用字元
分鐘 0-59 , - * /
小時 0-23 , - * /
月中的日 1-31 , - * ? / L W
1-12 或 JAN-DEC , - * /
週中的日 1-7 或 SUN-SAT , - * ? / L
1970-2199 , - * /
注意

您無法在同一個 Cron 表達式中指定 Day-of-month (月中的日) 和 Day-of-week (週中的日) 欄位中的值。如果您在其中一個欄位指定了數值,就請在另一個欄位中使用 ? (問號)​。

萬用字元

下表顯示 cron 運算式支援的萬用字元值。

Cron 運算式支援的萬用字元
萬用字元 描述
, , (逗號) 萬用字元包含額外的值。在 Month (月) 欄位,JAN、FEB、MAR 包括 January (一月)、February (二月) 與 March (三月)。
- - (破折號) 萬用字元用於指定範圍。在 Day (日) 欄位,1-15 包含指定月份的 1 至 15 號。
* * (星號) 包含欄位中所有的值。在 Hours (小時) 欄位中,* 包含每個小時。
/ / (斜線) 萬用字元用於指定增量。在分鐘欄位,您可以輸入 1/10 指定每 10 分鐘的間隔,從小時的第一分鐘開始。因此,1/10 指定第 1、11、21 和 31 分鐘,以此類推。
? ? (問號) 萬用字元用於表示不限定任何一個。在 Day-of-month (月中的日) 欄位,您可以輸入 7,如果您不在意這個月的 7 號是星期幾,就可以在 Day-of-month (月中的日) 欄位中輸入 ?​。
L L 萬用字元在 Day-of-month (月中的日) 或 Day-of-week (週中的日) 欄位可指定月份或週的最後一天。
W W 萬用字元在 Day-of-month (月中的日) 欄位可指定工作日。在 Day-of-month (月中的日) 欄位,3W 指定的是月份中最接近第三個工作日的日子。
# 後接數字一至五之星期幾欄位中的 # 萬用字元,會指定月份的特定日期。5#3 指定當前月份的第三個星期五。
注意

不支援頻率快於 5 分鐘的 Cron 表達式。尚未完成支援同時指定週間日與月中日的值。在其中一個欄位使用問號 (?) 字元。

如需 Cron 表達式的詳細資訊,請參閱 Wikipedia 網站上的 CRON 表達式

Rate 表達式

Rate 運算式有以下兩個必要欄位。欄位以空格隔開。

Rate 運算式的必要欄位
欄位

數值

正數,例如 115

單位

minute

minutes

hour

hours

day

days

如果值等於 1,則單位必須為單數。同樣地,對於大於 1 的數值,單位必須為複數。例如,rate(1 hours)rate(5 hour) 不是有效的,但 rate(1 hour)rate(5 hours) 是有效的。

關聯的 Cron 與 Rate 運算式

此部分包括 State Manager 關聯的 cron 與 rate 運算式範例。在建立這些表達式之前,請注意以下限制。

  • 關聯支援以下 Cron 表達式:每 1/2、1、2、4、8 或 12 小時;每天或每週的特定時間。

  • 關聯支援以下 Rate 表達式:間隔為 30 分鐘或者大於 30 分鐘並小於 31 天。

  • 如果您指定選用的 Seconds 欄位,它的值只能為 0 (零)。例如:cron(0 */30 * * * ? *)

注意

對於收集庫存之中繼資料的關聯 (AWS Systems Manager 的功能),我們建議使用 Rate 表達式。

下表使用必要的六個欄位顯示關聯的 cron 範例。

關聯的 Cron 範例
範例 詳細資訊

cron(0/30 * * * ? *)

每 30 分鐘

cron(0 0/1 * * ? *)

每小時

cron(0 0/2 * * ? *)

每 2 小時

cron(0 0/4 * * ? *)

每 4 小時

cron(0 0/8 * * ? *)

每 8 小時

cron(0 0/12 * * ? *)

每 12 小時

cron(15 13 ? * * *)

每天下午 1:15

cron(15 13 ? * MON *)

每個週一下午 1:15

以下是一些關聯的 rate 範例。

關聯的 Rate 範例
範例 詳細資訊

rate(30 minutes)

每 30 分鐘

rate(1 hour)

每小時

rate(5 hours)

每 5 小時

rate(15 days)

每 15 天

維護時段的 Cron 與 Rate 運算式

本節包含適用於維護時段的 Cron 和 Rate 表達式。

與 State Manager 關聯不同,維護時段支援所有 cron 和 rate 運算式。這包括在秒欄位中支援數值。

例如,以下 6 個欄位的 Cron 表達式會在每天上午 9:30 執行維護時段。

cron(30 09 ? * * *)

透過將值新增至 Seconds 欄位,以下 7 個欄位的 Cron 表達式會在每天上午 9:30:24 執行維護時段。

cron(24 30 09 ? * * *)

下表提供適用於維護時段的額外 6 個欄位 Cron 範例。

維護時段的 Cron 範例
範例 詳細資訊

cron(0 2 ? * THU#3 *)

每個月第三個週四的上午 02:00

cron(15 10 ? * * *)

每天的上午 10:15

cron(15 10 ? * MON-FRI *)

每個週一、週二、週三、週四和週五的上午 10:15

cron(0 2 L * ? *)

每個月最後一天的上午 02:00

cron(15 10 ? * 6L *)

每個月最後一個星期五的上午 10:15

下表提供適用於維護時段的 Rate 範例。

維護時段的 Rate 範例
範例 詳細資訊

rate(30 minutes)

每 30 分鐘

rate(1 hour)

每小時

rate(5 hours)

每 5 小時

rate(25 days)

每 25 天