cron 構文をフィールドごとに解説
cron 式の読み方と書き方の実践ガイド — 5つのフィールド、4つの演算子、よく使うレシピ、タイムゾーンの罠。
cron 式は暗号めいて見えますが、小さく学べる文法に従っています。5つのフィールドと4つの演算子を読めれば、30 4 1,15 * * はもうパズルではありません。これは実践的なガイドです。式を貼り付けてその意味を確認したい場合は無料の解説ツールをどうぞ。
5つのフィールド
標準的な cron 式はスペースで区切られた5つのフィールドです。
┌───────────── 分 (0 - 59)
│ ┌─────────── 時 (0 - 23)
│ │ ┌───────── 日(月) (1 - 31)
│ │ │ ┌─────── 月 (1 - 12)
│ │ │ │ ┌───── 曜日 (0 - 6、日曜日 = 0)
│ │ │ │ │
* * * * *
左から右へ: 分、時、日(月)、月、曜日。
4つの演算子
*— すべての値。* * * * *は毎分を意味します。,— リスト。日(月)フィールドの1,15は1日と15日。-— 範囲。時フィールドの9-17は09:00〜17:00。/— ステップ。分フィールドの*/15は15分ごと。
自由に組み合わせられます: 0 9-17 * * 1-5 は「平日9時〜17時の毎正時」。
実際によく使うレシピ
| 式 | 意味 |
|---|---|
*/15 * * * * | 15分ごと |
0 9 * * 1-5 | 平日の09:00 |
30 4 1,15 * * | 1日と15日の04:30 |
0 */4 * * * | 4時間ごと |
0 2 * * * | 毎日02:00 |
0 0 * * 0 | 日曜日の深夜0時 |
日(月)と曜日の落とし穴
日(月)と曜日の両方を(* 以外の値に)設定すると、ほとんどの cron 実装は AND ではなく OR として扱います。0 0 13 * 5 は「13日の金曜日」ではなく、「月の13日、かつ毎週金曜日」を意味します。和集合が本当に必要でない限り、どちらか一方を * のままにしてください。
タイムゾーンの罠
cron で最もよくある驚きの原因は構文ではなく、時刻です。サーバーの cron は通常 UTC で動きますが、あなたはローカル時間で考えています。そして年に2回、夏時間で壁掛け時計がずれます。UTC の crontab で「09:00」に設定したジョブは、毎年春と秋にオフィスの時間に対してずれていきます。
解決策は本物のタイムゾーンでスケジュールし、スケジューラーに夏時間を処理させることです。SteadyCron は各ジョブに固有の IANA タイムゾーン(例: Asia/Tokyo)を持たせ、「毎平日09:00」を1年を通じてローカルの09:00に保ちます。
試してみる
任意の式をcron 式解説ツールに貼り付けてわかりやすい言葉で確認し、タイムゾーンでの次回実行時刻をプレビューしてから、リトライとアラート付きで SteadyCron でスケジュールできます。