Cron構文チートシート:完全リファレンスガイド
Cronは、Unix系オペレーティングシステムにおける時間ベースのジョブスケジューラです。バックグラウンドタスクを設定する開発者であれ、サーバーメンテナンスを管理するDevOpsエンジニアであれ、Cron式の構文を理解することは不可欠です。
このガイドでは、cronフィールド、特殊文字、および実用的な例を完全に詳しく説明し、自信を持ってタスクをスケジュールできるようにします。
1. Cron式のフォーマット
標準的なcron式は5つのフィールドで構成されます(QuartzやJenkinsなどの一部のシステムでは6つです)。
┌───────────── 分 (0 - 59)
│ ┌───────────── 時 (0 - 23)
│ │ ┌───────────── 日 (1 - 31)
│ │ │ ┌───────────── 月 (1 - 12)
│ │ │ │ ┌───────────── 曜日 (0 - 6) (日曜日から土曜日)
│ │ │ │ │
* * * * *
2. 特殊文字リファレンス
| 文字 | 説明 | 例 |
|---|---|---|
* |
任意の値:そのフィールドのすべての可能な値に一致します。 | * * * * * (毎分) |
, |
値リストの区切り文字:値のリストを指定します。 | 0,15,30,45 (15分ごと) |
- |
値の範囲:XからYまでの範囲を指定します。 | 9-17 (午前9時から午後5時まで) |
/ |
ステップ値:増分を指定します。 | */15 (15分ごと) |
L |
最後 (Last):月または週の最終日を指定します。 | 5L (月の最終金曜日) |
W |
平日 (Weekday):指定した日に最も近い平日(月〜金)を指定します。 | 15W (15日に最も近い平日) |
# |
月の第N日:曜日の第何回目を指定します。 | 6#3 (月の第3土曜日) |
3. 一般的なCronの例
| スケジュール | 式 | 説明 |
|---|---|---|
| 毎分 | * * * * * |
タスクを毎分実行します。 |
| 毎時 | 0 * * * * |
毎時0分に実行します。 |
| 毎日深夜 | 0 0 * * * |
毎日00:00に1回実行します。 |
| 毎週日曜午前4時 | 0 4 * * 0 |
週次のバックアップに最適です。 |
| 15分ごと | */15 * * * * |
:00, :15, :30, :45に実行します。 |
| 営業時間 (9時-17時) | 0 9-17 * * 1-5 |
平日の毎時0分に実行します。 |
4. crontab -e vs crontab -l
crontabコマンドは、個人のcronジョブを管理するために使用されます。
crontab -e: 個人のcrontabファイルを編集用に開きます。初めての場合は、エディタ(nanoやvimなど)の選択を求められることがあります。crontab -l: 現在のユーザーのアクティブなcronジョブをすべて一覧表示します。crontab -r: 現在のすべてのcronジョブを削除します。注意して使用してください!
5. スケジュールの可視化
生のcron式を読むのは難しい場合があります。そのため、私たちは**Cronスケジュール可視化ツール**を構築しました。
私たちのツールは以下のことを助けます:
- 式の解析:
0 4 * * 0を「日曜日の04:00」に即座に翻訳します。 - 次回の実行時間:タイムゾーンに基づいて、スケジュールされた次の5回の実行時間を確認できます。
- 人間が読める説明:
*/5 9-17 * * 1-5が何を意味するか、もう推測する必要はありません。
FAQ:Cronジョブのトラブルシューティング
Q: Cronジョブが実行されないのはなぜですか?
A: 最も一般的な理由は環境変数です。Cronは最小限のシェル環境で実行されます。コマンドには常に絶対パスを使用し(例:python3ではなく/usr/bin/python3)、出力をファイルに記録してください:* * * * * /path/to/script.sh >> /var/log/cron.log 2>&1。
Q: systemd timerの代替案は何ですか?
A: 最近のLinuxディストリビューション(Ubuntu、Fedoraなど)は、cronよりもsystemd timersを推奨しています。設定はより複雑ですが、journalctlによる優れたログ記録、依存関係、およびより柔軟なスケジューリングを提供します。
Q: Cronでのタイムゾーンの問題はどう対処すればよいですか?
A: デフォルトでは、cronはシステムのローカルタイムゾーン(サーバーでは通常UTC)で実行されます。一部のシステムではcrontabファイルの先頭にCRON_TZ=Asia/Tokyoを設定できますが、最も確実な方法はサーバーの時計を希望のタイムゾーンに同期させることです。
Tool3M 関連ツール
- Cron解析・可視化: Cron式を即座に検証し、可視化します。
- JSONフォーマッタ: Cron文字列を含む可能性のある設定ファイルを整形します。
- タイムスタンプ変換: 実行時間を異なる形式やタイムゾーン間で変換します。