cron式の検証方法:ステップバイステップガイド
cron式の検証方法
cron式はコンパクトですが、間違いやすいものです。スラッシュの位置を間違えたり、範囲外の値を指定したりすると、ジョブが間違った時刻に実行されたり、まったく実行されなかったりします。重要なタスクが静かに失敗したとき、デプロイ前に式を検証しておけば、何時間ものデバッグを節約できます。
一般的な構文エラー
範囲外の値
各フィールドは特定の範囲を受け付けます。この範囲外の値は無効です。
# Invalid: minute 60 is out of range (0-59)
60 * * * *
# Invalid: hour 24 is out of range (0-23)
0 24 * * *
フィールドの欠落
cron式には正確に5つのフィールドが必要です。4つのフィールドは無効で、6つのフィールドには拡張構文が必要です。
# Invalid: only 4 fields (missing day of week)
0 0 * *
# Invalid: 6-field syntax without proper daemon support
0 0 * * * * /command.sh
常に数えましょう。分、時、日(月内日)、月、曜日です。
不正なステップ値
# Invalid: cannot step by 0
*/0 * * * *
# Invalid: step exceeds field maximum
*/61 * * * *
ステップ値は1以上で始まり、フィールドの最大値を超えてはなりません。
cron式の検証方法
ステップ1:フィールドに分割する
スペースで分割し、正確に5つのフィールドであることを確認します。
Expression: 30 6 * * 1-5
Fields: minute=30, hour=6, day=*, month=*, weekday=1-5
ステップ2:各フィールドを検証する
| フィールド | 許可される範囲 | 特殊文字を受け付ける |
|-------|--------------|-----------------------|
| 分 | 0-59 | * , - / |
| 時 | 0-23 | * , - / |
| 日(月内日) | 1-31 | * , - / |
| 月 | 1-12 | * , - / |
| 曜日 | 0-7 | * , - / |
ステップ3:競合をチェックする
構文的には有効でも、論理的に驚きのある式があります。
# Runs on the 15th OR every Sunday — an OR condition
0 0 15 * 0
標準的なcronでは、日(月内日)と曜日を一緒に指定するとOR条件になります。どちらかが一致した時点でジョブが実行されます。
ステップ4:今後の実行時刻をプレビューする
実行時刻を生成して、スケジュールを視覚的に確認します。
Expression: 0 2 * * 1
Next 5 executions:
1. 2026-07-27 02:00:00 (Monday)
2. 2026-08-03 02:00:00 (Monday)
3. 2026-08-10 02:00:00 (Monday)
プレビューが意図と一致しない場合は、本番環境に移す前に式を修正してください。
実行されないジョブのデバッグ
有効な式なのに実行されない場合は、通常システム側の問題です。
- 権限 — スクリプトに実行権限が必要です(
chmod +x)。 - パス — cronは最小限のPATHを使用します。常に絶対パスを使用してください。
/usr/local/bin/mybackup.shであって、mybackup.shではありません。 - 環境 — cronはシェルプロファイルを読み込みません。crontabまたはスクリプト自体の中で変数をエクスポートしてください。
- ログ — 出力をリダイレクトして実行を確認します。
0 6 * * * /path/to/script.sh >> /var/log/cron.log 2>&1
バリデータツールの使用
cron式バリデータには3つの機能があります。
- 構文検証 — フィールド値と形式に関する即時フィードバック。
- スケジュールプレビュー — 現在の日付からの今後の実行時刻を表示。
- 視覚的なカレンダー — 予定された実行を月間カレンダー上にプロット。
いかなるcron式も、次の数回の実行時刻をプレビューせずにデプロイすべきではありません。30秒のチェックで、静かなスケジューリング障害を防げます。