cron スケジュール レシピ
実務でよく使う標準 5 フィールドの cron 式を集めました。カードをクリックすると式がコピーされ、cron ツールに貼り付ければ分かりやすい説明と次の実行時刻まで確認できます。カード上部のバーは、1 日(曜日・日付単位のレシピは週・月・年)の軸上に実行タイミングを示したものです。
ツールを開く →毎分
* * * * *5 分ごと
*/5 * * * *10 分ごと
*/10 * * * *15 分ごと
*/15 * * * *30 分ごと
*/30 * * * *毎時 0 分
0 * * * *毎時 30 分
30 * * * *3 時間ごと
0 */3 * * *6 時間ごと
0 */6 * * *業務時間中の毎時(9 時から 18 時)
0 9-18 * * *毎日 0 時
0 0 * * *毎日 9 時
0 9 * * *毎日 9 時と 18 時
0 9,18 * * *深夜バッチ(2 時 30 分)
30 2 * * *平日 9 時
0 9 * * 1-5週末の 0 時
0 0 * * 0,6毎週月曜 8 時
0 8 * * 1毎週金曜 18 時
0 18 * * 5毎週日曜 4 時
0 4 * * 0毎月 1 日 0 時
0 0 1 * *月末の候補日 23 時(28 日から 31 日)
0 23 28-31 * *四半期初日の 0 時
0 0 1 1,4,7,10 *毎年 1 月 1 日 0 時
0 0 1 1 *よくある質問
- cron の 5 つのフィールドはそれぞれ何を意味しますか?
- 左から順に、分(0-59)、時(0-23)、日(1-31)、月(1-12)、曜日(0-6、0 が日曜)です。曜日の 7 を日曜として受け付ける実装も多いですが、0 ならどこでも通ります。日と曜日を同時に指定すると多くの cron は OR で解釈して想定より頻繁に実行されるため、このページのレシピのようにどちらか一方だけを使うのが安全です。
- タイムゾーンはどうなりますか?
- cron はデーモンが動くサーバーのタイムゾーンに従います。サーバーが UTC なら、ここに書かれた「9 時」は UTC の 9 時であり、日本時間では 18 時です。crontab を登録する前にサーバーの時刻設定を確認し、実装が対応していれば CRON_TZ 変数で固定できます。夏時間のある地域では、時計が飛んだり重複したりする未明の時間帯は避けるのが無難です。
- 毎月末日に実行するには?
- 標準の 5 フィールドには末日を表す構文がありません(L は Quartz などの拡張です)。よく使われる回避策は、28 日から 31 日まで毎日起動し、スクリプト側で「明日が 1 日かどうか」を確認する方法です。GNU date なら [ "$(date -d tomorrow +\%d)" = "01" ] のような条件を先頭に付けます(crontab 内では % を \% にエスケープする必要があります)。毎月 1 日に実行して前月分の締めとして扱う方が簡単な場合もあります。
- 秒単位の実行はできますか?
- できません。標準の crontab の最小単位は 1 分で、秒フィールドはありません。先頭に秒が付く 6 フィールド形式は Quartz など一部ライブラリ専用で、通常の crontab では書式エラーになります。30 秒間隔が必要な場合は、同じコマンドを 2 行登録して片方の先頭に sleep 30 を付ける方法が広く使われています。