フィールド構成(標準5フィールド形式)
分 時 日 月 曜日
例: 50 6 * * 1-5
| フィールド | 値 | 意味 |
|---|---|---|
| 分 | 50 | 50分 |
| 時 | 6 | 6時 |
| 日 | * | 指定なし(毎日) |
| 月 | * | 指定なし(毎月) |
| 曜日 | 1-5 | 月〜金(1=月曜, 7=日曜) |
→ 平日6:50に実行
基本ルール:5フィールドは基本AND結合
分==X AND 時==Y AND 日==Z AND 月==W AND 曜日==V
例外ルール:「日」と「曜日」だけはOR判定になりうる
両方が * 以外の具体的な値のとき、この2フィールドの間だけOR扱いになる。
例: 30 11 9 3 4
| 分 | 時 | 日 | 月 | 曜日 |
|---|---|---|---|---|
| 30 | 11 | 9 | 3 | 4(木) |
論理式:
分==30 AND 時==11 AND 月==3 AND (日==9 OR 曜日==4)
→「3月9日(何曜日でも)」または「3月の毎週木曜日」で発火。
「3月9日が木曜日の年だけ」という意味にはならない。
例: 50 6 * 4 1-5(「日」が * のケース)
「日」が * なのでOR特例は発動せず、単純に絞り込み条件から除外されるだけ。
分==50 AND 時==6 AND 月==4 AND 曜日 in {月〜金}
→ 4月中の平日(土日を除く)、毎日6:50に実行
結論
- 5フィールドは基本すべてAND
- 「日」と「曜日」の両方に具体的な値が入っている場合だけ、その2つの間はOR
- どちらかが
*なら、*でない方の条件だけで絞られる(ORは発生しない) - AWS(EventBridge/Auto Scalingのスケジュール式)では、このOR挙動による事故を防ぐため、日と曜日のどちらか一方は必ず
?にするというルールが課されている - 「1回だけ実行したい」場合は、cronでゴリ押しするより開始日=終了日にする等、単発スケジュールの仕組みを使う方が素直