cron式の読み方を5フィールドと記法で理解する|設定例と「実行されない」罠
公開日:2026年7月16日 対象ツール:cron式の説明
cron式は「短い数字と記号の並び」なので、書いた本人でも数日経つと読めなくなりがちです。ここでは丸暗記ではなく仕組みから読めるように、5つのフィールドと記法、定番の設定例、そして意外と多い「書けたのに動かない」原因までをまとめます。式の意味そのものは、このツールに貼れば日本語の1文で即確認できます。
5つのフィールドと、それぞれの範囲
cron式は左から順に、半角スペース区切りで5つの値を並べます。順番と範囲を取り違えると全く別の時刻になるので、まずここを固定で覚えます。
- 分(0〜59)
- 時(0〜23、24時間制)
- 日(1〜31)
- 月(1〜12)
- 曜日(0〜7。0と7がどちらも日曜、1が月曜…6が土曜)
このツールは5つそろっていない式や範囲外の値をエラーとして案内します。「時」が24時間制で、0時=真夜中という点は特に間違えやすいところです。
記法(* , - / の意味)
各フィールドには、単なる数字のほかに4つの記号が使えます。
- *(アスタリスク)…そのフィールドの「すべて」。分の * は毎分、曜日の * は毎日を意味します。
- -(ハイフン)…範囲。曜日の 1-5 は月〜金、時の 9-18 は9時から18時まで。
- ,(カンマ)…列挙。0,30 なら0分と30分の2回。
- /(スラッシュ)…ステップ(間隔)。分の */15 は0・15・30・45分(15分ごと)、*/5 は5分ごと。a/n と書くと a からそのフィールドの最大値まで n 間隔になります。
これらは 1-5/2(月・水・金)や 0-30,45 のように組み合わせられます。
よくある設定例
- 0 3 * * * … 毎日3:00(深夜バッチの定番)
- 0 9 * * 1-5 … 平日(月〜金)の9:00
- */5 * * * * … 5分ごと
- 0 0 1 * * … 毎月1日の0:00
日と曜日を両方書くと「OR」になる
ここが最大の落とし穴です。日(3番目)と曜日(5番目)を両方とも具体的に指定すると、cronの仕様では「両方に一致」ではなく「どちらかに一致した日」(OR)で実行されます。たとえば 0 0 1 * 1 は「1日に加えて、毎週月曜」の0:00。ツールも「1日、または 月曜」と表示します。「毎月1日の月曜だけ」のつもりで書くと、意図と大きくずれます。
式は正しいのに実行されない罠
読み方が合っていても動かないときは、cronの外側に原因があることがほとんどです。
- タイムゾーン/サーバー時刻…cronはサーバーの時刻で動きます。UTC設定のサーバーで「9時」と書けば、日本時間の18時に動きます。
- 環境変数・PATH…cronはログイン時のシェル設定を読み込まないため、手元で通るコマンドが cron 内では「command not found」になりがち。実行ファイルは絶対パスで書くか、スクリプト先頭でPATHを定義します。
- 相対パス…作業ディレクトリが想定と違うため、ログや出力先の相対パスがずれる。パスは絶対で書くのが安全です。
失敗例として、0 24 * * * は時が範囲外(0〜23)でエラー、*/61 * * * * は分の間隔が最大値を超えて意図通りに動きません。「深夜0時」は 24 ではなく 0 です。
このツールでの読み方
入力欄に「分 時 日 月 曜」を半角スペース区切りで貼るだけで、いつ動くかを日本語1文で表示し、フィールドごとの意味も並べます。例ボタンから定番の式も試せます。なお本ツールは数値ベースの記法(* */n a-b a,b とその組み合わせ)専用で、@daily などのニックネームや JAN・MON の名前、L・W・# の拡張記法には非対応です。それらを使う環境では、あわせて実行環境の公式ドキュメントも確認してください。書いた式に迷ったら、まずここで意味を確かめるのが確実です。