Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
58
Help us understand the problem. What is going on with this article?

More than 3 years have passed since last update.

@da-sugi

AWS_Cron式のワイルドカード

概要

  • AWSのCloudWatchEventsでスケジュールをcron式で設定する際に詰まったので、Qiitaに残しておく

基本書式

  • 例: 2017/1/1 11時11分に実行する場合

    11 11 1 1 ? 2017 
    
    • 左から[分] [時] [日] [月] [曜日] [年] 6つの必須フィールドでできている
      ※普通のcron式だとはないので注意
  • それぞれのフィールドが取る値は下記のようになっている

    フィールド ワイルドカード
    0 - 59 , - * /
    時間 0 - 23 , - * /
    1 - 31 , - * ? / L W
    1 - 12 または JAN-DEC , - * /
    曜日 1 - 7 または SUN - SAT , - * ? / L
    1970 - 2199 , - * /

ワイルドカード

種類

  • CloudWatchEvensのルールのスケジュール式で使えるワイルドカードは全部で7つ

    ワイルドカード 用途
    , 同じフィールド内に複数の値を追加できる
    - 範囲を指定できる
    * フィールドの持つ値を全てを含む
    / 増分指定ができる
    ? 任意を意味する
    使えるのはday-of-month(日)フィールドday-of-week(曜日)フィールド
    L 月、または週の最終日を指定できる
    使えるのはday-of-month(日)フィールドday-of-week(曜日)フィールド
    W ◯日に一番近い平日を指定できる
    使えるのはday-of-month(日)フィールド

使い方

  • ワイルドカードの使い方について、例とともに書いていきます。

同じフィールド内に複数の値を追加できる( , )

例 : 2000年と2017年1月と2月1日と10日と15日0時と12時1分と30分と59分に実行

1,30,59 0,12 1,10,15 1,2 ? 2000,2017

範囲を指定できる( - )

例 : 1980年から1990年(毎年)8月から10月(毎月)15日から20日(毎日)10時から13時(毎時)1分から5分に実行

1-5 10-13 15-20 8-10 ? 1980-1990

フィールドの持つ値を全てを含む( * )

例 : 毎分実行

* * * * ? *

増分指定ができる( / )

例 : 2000年から10年毎1月から2ヶ月毎1日から3日毎0時から5時間毎0分から15分毎に実行

0/15 0/5 1/3 1/2 ? 2000/10

月、または週の最終日を指定できる( L )

例1 : 毎月末最終日0時0分に実行

0 0 L * ? *

例2 : 毎週末最終日0時0分に実行

0 0 ? * L *

◯日に一番近い平日を指定できる( W )

例 : 毎月15日に最も近い平日0時0分に実行

0 0 15W * ? *
  • 上記cron式は15日が平日か土日かによって実行タイミングが下記のように変わる
    1. 15日が平日の場合
      • 15日に実行される
    2. 15日が土曜日の場合
      • 15日に最も近い平日は14日の金曜日なので、14日に実行される
    3. 15日が日曜日の場合
      • 15日に最も近い平日は16日の月曜日なので、16日に実行される

任意を意味する( ? )

  • おそらく曜日のところだけに毎回出てくる?にみなさん疑問をお持ちだったことでしょう。ここで解説します。
  • 公式のドキュメントにも書いてありますがAWSのCron式には下記のような制限があります。

    Cron式の日フィールド及び曜日フィールドを同時に指定することはできません。 
    一方のフィールドに値を指定すると、
    もう一方のフィールドで ? (疑問符) を使用する必要があります。
    
    • ということでこれはもうこういう決まりと覚えてください(笑
      なので、日付を指定する場合は曜日に?、曜日を指定する場合は日付に?を必ず付けてください

例1 : 毎月1日(曜日は問わない)の0時0分に実行

0 0 1 * ? *

例2 : 毎週日曜日(日付は問わない)の0時0分に実行

0 0 ? * SUN *

最後に

  • AWSのCloudWatchEventsのルールのスケジュールでCron式を設定する際に、ルール作成までしなくても、正しい設定の場合は、以降10回分の実行タイミングが表示されるので、試しにやってみるとわかりやすいと思います!
58
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
58
Help us understand the problem. What is going on with this article?