參考:Systems Manager 的 Cron 和 Rate 運算式 - AWS Systems Manager

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

參考:Systems Manager 的 Cron 和 Rate 運算式

在 AWS Systems Manager 中建立 State Manager 關聯或維護時段時,您可以指定應執行時段或關聯的排程。您可以將排程指定為時間類型的項目 (稱為 cron 運算式),或頻率類型的項目 (稱為 rate 運算式)。

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

下列資訊適用於維護時段與關聯的 Cron 和 Rate 運算式。

單一執行排程

當您建立關聯或維護時段時,可以使用國際標準時間 (UTC) 格式指定時間戳記,以便在指定的時間執行一次。例如:"at(2020-07-07T15:55:00)"

排程位移

關聯與維護時段僅支援 Cron 運算式的排程偏移。排程偏移是在執行關聯和維護時段之前,在 cron 運算式所指定的日期和時間之後等待的天數。

Maintenance window example

在以下命令中,Cron 表達式會排定維護時段,在每個月的第三個星期二晚上 11:30 執行:但是,由於排程偏移為 2,因而維護時段會等到兩天後在晚上 11:30 執行。

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
Association example

在下列命令中,Cron 表達式會排定關聯,以在每個月的第二個星期四執行。但是,由於排程偏移是 3,因此在三天後的下個星期日之前,才會執行關聯。

aws ssm create-association \ --name "AWS-UpdateSSMAgent" \ --targets "Key=instanceids,Values=i-0cb2b964d3e14fd9f" \ --schedule-expression "cron(0 0 ? * THU#2 *)" \ --schedule-offset 3 --apply-only-at-cron-interval
注意

若要使用具有關聯的偏移,您必須指定 --apply-only-at-cron-interval 選項。此選項會告訴系統不要在建立關聯後立即執行。

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

必要欄位

維護時段的 Cron 運算式有六個必要欄位。關聯的 Cron 運算式有五個。(State 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 運算式支援的值
欄位 萬用字元
分鐘 0-59 , - * /
小時 0-23 , - * /
D ay-of-month 1-31 , - * ? / L W
月份 (僅限維護時段) 1-12JAN-DEC , - * /
D ay-of-week 1-7SUN-SAT , - * ? / L #
1970-2199 , - * /
注意

您無法在相同 cron 運算式的 day-of-month 和 day-of-week欄位中指定值。如果您在其中一個欄位指定了數值,就請在另一個欄位中使用 ? (問號)​。

Cron 運算式的萬用字元

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

注意

不支援頻率快於 5 分鐘的 Cron 運算式。指定 a day-of-week 和 day-of-month值的 Support 不完整。在其中一個欄位使用問號 (?) 字元。

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

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

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

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

  • State Manager 目前不支援在 Cron 運算式中為關聯指定月份。

關聯支援 cron 運算式,其中包括一週中的某一天和數字符號 (#),以指定一個月的第 n 天執行關聯。以下是在每月第三個週二 23:30 UTC 執行 cron 排程的範例:

cron(30 23 ? * TUE#3 *)

以下是在每月第二個週四午夜 UTC 執行的範例:

cron(0 0 ? * THU#2 *)

關聯還支援 (L) 符號來指示一個月的最後 X 天。以下是在每月最後一個週二午夜 UTC 執行 cron 排程的範例:

cron(0 0 ? * 3L *)

若要進一步控制關聯的執行時間,例如,如果您希望在週二修補程式日後的兩天執行關聯,則可以指定偏移量。同時偏移定義在排程的日期之後等待多少天才能執行關聯。例如,如果您指定了 cron(0 0 ? * THU#2 *) 的 cron 排程,則可以在排程偏移欄位指定數字 3,以在該月第二個週四之後的每個週日執行關聯。

若要使用偏移,必須在主控台選擇 Apply association only at the next specified Cron interval (僅在下一個指定 Cron 間隔時間套用關聯) 選項,或者必須在命令列中指定使用 --apply-only-at-cron-interval 參數。此選項會告訴 State Manager 不要在建立關聯後立即執行。

下表顯示關聯的 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

cron(30 23 ? * TUE#3 *)

每月第三個週二下午 11:30

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

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

rate(30 minutes)

每 30 分鐘

rate(1 hour)

每小時

rate(5 hours)

每 5 小時

rate(15 days)

每 15 天

關聯的 AWS CLI 範例

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

注意

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

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

維護時段的 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 天

維護時段的 AWS CLI 範例

若要使用 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-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
詳細資訊

Wikipedia 網站Cron 運算式