cron式構文:実例付き完全ガイド
cron式の構文
cronはUnix系システムにおける標準的なジョブスケジューラです。すべてのcron式は、コマンドをいつ実行すべきかを指定するコンパクトな文字列でスケジュールを定義します。構文を理解することは、バックアップ、ログローテーション、メンテナンスタスクの自動化に不可欠です。
5フィールド形式
標準的なcron式には、スペースで区切られた5つのフィールドがあります。
* * * * *
| | | | |
| | | | +----- Day of the Week (0-7, 0 and 7 = Sunday)
| | | +------- Month (1-12)
| | +--------- Day of the Month (1-31)
| +----------- Hour (0-23)
+------------- Minute (0-59)
フィールドの詳細
| フィールド | 範囲 | 特殊文字 | 例 |
|-------|-------|-------------------|---------|
| 分 | 0-59 | , - * / | 30 = 30分に実行 |
| 時 | 0-23 | , - * / | 6 = 午前6時に実行 |
| 日(月内日) | 1-31 | , - * / | 15 = 15日に実行 |
| 月 | 1-12 | , - * / | 6 = 6月に実行 |
| 曜日 | 0-7 | , - * / | 0 = 日曜日に実行 |
分は実行の正確な分を制御します。30 * * * * は毎時30分に実行されます。時は時刻を定義します。0 6 * * * は毎日6:00に実行されます。日(月内日)は特定の暦日に制限します。0 0 15 * * は毎月15日の深夜0時に実行されます。月は実行を特定の月に制限します。0 0 1 6 * は6月1日に実行されます。曜日は実行する曜日を制御します。0 8 * * 1-5 は月曜から金曜の午前8時に実行されます。
重要: 29〜31日は、その日付が存在する月のみ実行されます。日数が少ない月では、これらの値は静かにスキップされます。
特殊文字
| 文字 | 名称 | 用途 | 例 |
|------|------|---------|---------|
| * | アスタリスク | すべての値 | 分の* = 毎分 |
| , | カンマ | 値のリスト | 1,15,30 = 1分、15分、30分 |
| - | ハイフン | 範囲 | 9-17 = 9時から17時まで |
| / | スラッシュ | ステップ値 | */5 = 5分ごと |
スラッシュによるステップ値
スラッシュは「N単位ごと」を表します。
# Every 5 minutes
*/5 * * * *
# Every 2 hours
0 */2 * * *
# Every 15 minutes during business hours
*/15 9-17 * * *
一般的なcronスケジュールパターン
| スケジュール | 式 | 説明 |
|----------|------------|-------------|
| 毎分 | * * * * * | 1日1,440回実行 |
| 5分ごと | */5 * * * * | ヘルスチェック、監視 |
| 毎時 | 0 * * * * | 各時間の先頭 |
| 1日2回 | 0 6,18 * * * | 午前6時と午後6時 |
| 毎日深夜0時 | 0 0 * * * | 定番のメンテナンス |
| 毎週日曜 | 0 0 * * 0 | 毎週のメンテナンス |
| 月の1日 | 0 0 1 * * | 毎月のレポート |
| 平日の午前9時 | 0 9 * * 1-5 | 営業時間の開始 |
非標準のショートカット
一部のcron実装は名前付きショートカットをサポートしています。@yearly(1月1日)、@monthly(毎月1日)、@weekly(日曜日)、@daily(深夜0時)、@hourly、@reboot(システム起動時に1回実行)。Vixie cron、cronie、systemdタイマーでサポートされています。
よくある間違い
- 日(月内日)と曜日の両方を設定するとOR条件になります。どちらかが一致した時点でジョブが実行され、意図した動作になることはほとんどありません。
- cronはシステムのタイムゾーンを使用します。夏時間の切り替わり付近のジョブは、2回実行されたり、まったく実行されなかったりすることがあります。
- 常に5つのフィールドを数えましょう。4つのフィールドは無効で、6つのフィールドには拡張cron構文が必要です。
cron式をテストする
cron式バリデータを使用して構文をチェックし、今後の実行時刻をプレビューし、本番環境に影響を与える前にエラーを検出しましょう。30秒の検証チェックで、静かなスケジューリング障害を防げます。