cron式は、Linux cron・GitHub Actions・Kubernetes CronJob・AWS EventBridge・その他多数のスケジューラでジョブの実行タイミングを制御します。構文はコンパクトですが直感的ではありません——0 9 * * 1-5 は参考資料なしでは一瞬読み解けません。オンラインパーサーがcron式を即座に平易な言葉で説明します。
cron式の構造
標準的なcron式はスペースで区切られた5つのフィールドを持ちます:
┌───────────── 分 (0–59)
│ ┌───────────── 時 (0–23)
│ │ ┌───────────── 日 (1–31)
│ │ │ ┌───────────── 月 (1–12)
│ │ │ │ ┌───────────── 曜日 (0–7、0と7は日曜日)
│ │ │ │ │
* * * * *
一部のシステム(Quartz・Spring・AWS Lambda)では秒や年を含む6フィールドまたは7フィールド形式を使用します。パーサーは両方のバリアントに対応しています。
特殊文字
| 文字 | 意味 | 例 |
|---|---|---|
* | すべて / 毎 | * * * * * — 毎分 |
, | リスト | 1,15 * * * * — 1分と15分に実行 |
- | 範囲 | 1-5 * * * * — 1分から5分 |
/ | ステップ | */15 * * * * — 15分ごと |
L | 最後 | 0 0 L * * — 月末(非標準) |
# | 第n曜日 | 0 10 * * 1#2 — 第2月曜日(非標準) |
? | 値なし | 曜日または日フィールドで使用(Quartz) |
よく使うcron式20選
N分ごと
# 毎分
* * * * *
# 5分ごと
*/5 * * * *
# 15分ごと
*/15 * * * *
# 30分ごと
*/30 * * * *
毎時・毎日
# 毎時0分
0 * * * *
# 毎日0時(UTC)
0 0 * * *
# 毎日9時(UTC)
0 9 * * *
# 1日2回 — 8時と20時
0 8,20 * * *
平日スケジュール
# 平日9時
0 9 * * 1-5
# 毎週月曜9時
0 9 * * 1
# 月・水・金の12時
0 12 * * 1,3,5
# 週末10時
0 10 * * 0,6
月次・四半期
# 毎月1日の0時
0 0 1 * *
# 毎月1日と15日の0時
0 0 1,15 * *
# 各四半期の第1日(1月・4月・7月・10月)
0 0 1 1,4,7,10 *
特定の時刻
# 元日0時
0 0 1 1 *
# 毎週日曜4時(メンテナンス時間)
0 4 * * 0
# 6時間ごと
0 */6 * * *
プラットフォーム別の注意点
Linux crontab
標準5フィールド構文。crontab -e で編集します。タイムゾーンはシステムタイムゾーンです。
# 現在のcrontabを確認
crontab -l
# crontabを編集
crontab -e
GitHub Actions
UTC表記の5フィールド形式。負荷が高い場合、ジョブは数分遅れることがあります:
on:
schedule:
- cron: '0 9 * * 1-5' # 平日9時(UTC)
日本時間(JST)に換算するには9時間引いてください(例:JST 18時 = UTC 9時)。
AWS EventBridge / CloudWatch Events
最初のフィールドが秒の6フィールド形式、または個別の「レート式」を使用します:
cron(0 9 ? * MON-FRI *)
rate(5 minutes)
? は日または曜日フィールドのどちらかにのみ必要です(両方ではありません)。
Kubernetes CronJob
標準5フィールド構文。タイムゾーンフィールド(spec.timeZone)はKubernetes 1.27+で利用可能です:
spec:
schedule: "0 9 * * 1-5"
timeZone: "Asia/Tokyo"
cron式を素早く読む
このパターンに慣れてください:
- 先頭の
0+ 時フィールド = “その時の0分” - フィールドの
*= そのフィールドの”すべての単位” */n= “n単位ごと”-で区切られた2つの数値 = 範囲,で区切られた数値 = 特定の値のリスト
つまり 0 9 * * 1-5 は:0分、9時、任意の日、任意の月、平日 → 毎平日9:00。
cronの問題デバッグ
ジョブが実行されなかった場合チェックすること:
- cronデーモンは起動しているか?(
systemctl status cron) - スクリプトは実行可能か?(
chmod +x script.sh) - スクリプトで絶対パスを使っているか?(cronは
$PATHが最小限) - crontabを保存したか?(
crontab -lで確認) - ログを確認:
/var/log/syslogまたは/var/log/cron
出力が消えた場合:cronはデフォルトで出力をメールで送信します。ログファイルにリダイレクトしてください:
0 9 * * * /path/to/script.sh >> /var/log/myjob.log 2>&1
タイムゾーンの混乱:cronはシステムタイムゾーンで実行されます。明示的な制御には、crontabに TZ を設定してください:
TZ=Asia/Tokyo
0 9 * * 1-5 /path/to/script.sh
本番環境に適用する前にスケジュールを検証しましょう。cron式パーサーを試す →