ブログ

cron 構文をフィールドごとに解説

cron 式の読み方と書き方の実践ガイド — 5つのフィールド、4つの演算子、よく使うレシピ、タイムゾーンの罠。

SteadyCron cronschedulingguide

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 でスケジュールできます。