デジタル道具屋
デジタル道具屋

Cron設定ジェネレーター

定期実行スケジュールをUIで簡単に作成し、日本語で意味を解説

生成されたCron設定

* * * * * curl https://example.com/api/task

解説:

1分ごとに常に実行します。

※この行を crontab -e で開いた設定ファイルの末尾に追記してください。

Cron設定ジェネレーターの使い方

分・時・日・月・曜日の5フィールドを画面上で選ぶだけで、crontab にそのまま貼り付けられる Cron 式を組み立てるツールです。生成した式は上部に「式 + コマンド」の1行として表示され、同時にその式が意味するスケジュールを日本語の文章で確認できます。処理はすべてブラウザ内で完結し、入力したコマンドが外部に送られることはありません。

1

各フィールドの設定

分・時・日・月・曜日それぞれで「毎」「間隔指定」「特定の値」「範囲指定」の4種類から選びます。特定の値は複数選択でき、選んだ順に関係なく小さい順に並べ替えて出力されます。

2

コマンドの入力

定期実行したいコマンドを入力します。cron はログインシェルと異なる最小限の環境変数で動くため、/usr/bin/curl のようにフルパスで書くのが確実です。

3

日本語の説明文で確認

上部の説明欄に「毎月の毎日(月曜日・水曜日・金曜日) 9時 0分 に実行します。」のような文章が表示されます。意図と違う場合はフィールドの設定を見直してください。

4

コピーして crontab に追記

コピーボタンで「式 コマンド」の1行がクリップボードに入ります。crontab -e で開いた設定ファイルの末尾に貼り付けて保存すると、次の該当時刻から実行されます。

DEEP DIVE

5つのフィールドと特殊文字の意味

このツールが出力する式は crontab(5) の標準的な5フィールド形式です。左から順に「分 時 日 月 曜日」で、各フィールドは数値のほかに次の記号を組み合わせて書きます。画面の4つのボタンは、それぞれこの記号に対応しています。

位置フィールド取りうる値備考
1分0〜59―
2時0〜2324時間表記。実行側のタイムゾーンで解釈される
3日1〜31その月に存在しない日(2月30日など)は実行されない
4月1〜12crontab(5) では JAN〜DEC の英字も可(このツールは数値のみ出力)
5曜日0〜6(0=日曜)多くの実装では 7 も日曜。日と曜日を両方指定すると OR 条件
記号意味例画面のボタン
*すべての値* * * * *(毎分)毎
/間隔(*/n は 0 から n おき)*/15(0,15,30,45分)間隔指定
,複数の値の列挙9,18(9時と18時)特定の値
-範囲(両端を含む)1-5(月曜〜金曜)範囲指定

※ */n の起点はそのフィールドの最小値(分・時なら 0、日・月なら 1)です。*/7 を分に指定すると 0,7,14,…,56 分となり、次の時の 0 分までは4分しか空きません。「きっかり7分ごと」にはならない点に注意してください。 フィールドの正式な定義は crontab(5) のマニュアル と、POSIX の crontab 仕様 で参照できます。

DEEP DIVE

よく使う式の早見表

定番のスケジュールと、このツールでの設定方法をまとめました。式をそのまま crontab に貼り付けても、画面で同じ設定を再現して説明文を確認してから使っても構いません。

式意味このツールでの設定
* * * * *毎分すべて「毎」(初期状態)
0 * * * *毎時0分分: 特定の値 → 0
*/15 * * * *15分おき(0,15,30,45分)分: 間隔指定 → 15
0 9 * * *毎日9時分: 0、時: 9
0 9 * * 1-5平日(月〜金)の9時分: 0、時: 9、曜日: 範囲指定 → 1 〜 5
0 */6 * * *6時間おき(0,6,12,18時)分: 0、時: 間隔指定 → 6
30 8 1 * *毎月1日の8時30分分: 30、時: 8、日: 特定の値 → 1
0 22 * * 0毎週日曜の22時分: 0、時: 22、曜日: 特定の値 → 日
0 0 1 1 *毎年1月1日の0時分: 0、時: 0、日: 1、月: 1

※ 「分: 0」のように書いた箇所は「特定の値」で該当する数値を1つ選ぶ操作を指します。 時刻はすべて実行側のタイムゾーンで解釈されるため、UTC で動く環境に日本時間の予定を書くときは9時間引いてください(日本時間の9時 → 0 0 * * *)。

DEEP DIVE

crontab・GitHub Actions・Kubernetes CronJob などの方言差

「cron 式」と呼ばれる書式は環境ごとに細部が異なります。このツールの出力は Linux の crontab を基準にしているため、他の環境に貼り付けるときは次の違いを確認してください。

環境フィールド数タイムゾーン主な違い
Linux crontab(Vixie cron / cronie)5システムのタイムゾーン(cronie は CRON_TZ で上書き可)このツールの基準。@daily などの短縮表記も使える
GitHub Actions(on.schedule)5UTC 固定最短間隔は5分。混雑時は開始が遅れたり実行がスキップされることがあると公式ドキュメントに明記
Kubernetes CronJob5spec.timeZone で指定(v1.27 以降で標準機能)。未指定ならコントローラーのタイムゾーン@hourly などの短縮表記も可。過去の未実行分の扱いは startingDeadlineSeconds で制御
Spring @Scheduled / Quartz6(先頭に秒)zone 属性や設定で明示Quartz は日と曜日のどちらかを ? にする必要があり、L(末日)・#(第N曜日)記法が使える
AWS EventBridge(cron 式)6(末尾に年)UTC(EventBridge Scheduler はタイムゾーン指定可)日と曜日の一方は ? にする。曜日は 1〜7(1=日曜)で、このツールの 0〜6 とずれる

※ たとえばこのツールで作った 0 9 * * 1-5 を Spring に貼るなら 0 0 9 * * 1-5(先頭に秒の 0)、EventBridge なら 0 9 ? * 2-6 *(曜日を1始まりに、日を ? に)と書き換える必要があります。 各環境の仕様は GitHub Actions のドキュメント、Kubernetes CronJob のドキュメント で確認できます。

実際の使用例

毎晩深夜3時にデータベースをバックアップ

分と時だけを「特定の値」で固定し、日・月・曜日は「毎」のままにします。出力の1行目が生成される式、2行目が画面上部に表示される説明文です。

INPUT

分: 特定の値 → 0
時: 特定の値 → 3
日・月・曜日: 毎
コマンド: /usr/bin/mysqldump -u user db > /backup/db.sql

OUTPUT

0 3 * * * /usr/bin/mysqldump -u user db > /backup/db.sql
説明文: 毎月の毎日(毎曜日) 3時 0分 に実行します。

5分おきにAPIを叩く

分を「間隔指定」にして 5 を入力すると */5 になります。0分・5分・10分…と、毎時0分を起点とした5分刻みで実行されます。

INPUT

分: 間隔指定 → 5
時・日・月・曜日: 毎
コマンド: /usr/bin/curl https://api.example.com/sync

OUTPUT

*/5 * * * * /usr/bin/curl https://api.example.com/sync
説明文: 毎月の毎日(毎曜日) 毎時 5分おき に実行します。

月・水・金の9時と18時に通知を送る

時と曜日で「特定の値」を複数選んだ例です。選択順に関係なく小さい順に並び、曜日は 1,3,5(月・水・金)として出力されます。

INPUT

分: 特定の値 → 0
時: 特定の値 → 9, 18
曜日: 特定の値 → 月, 水, 金
日・月: 毎

OUTPUT

0 9,18 * * 1,3,5 /usr/bin/php /app/notify.php
説明文: 毎月の毎日(月曜日・水曜日・金曜日) 9時・18時 0分 に実行します。

よくある質問

生成される式は何フィールドですか?秒や年は指定できますか?

Linux の crontab(5) と同じ「分 時 日 月 曜日」の5フィールドです。秒フィールドを先頭に持つ6フィールド形式(Spring の @Scheduled や Quartz)や、年フィールドを末尾に持つ形式(AWS EventBridge)には対応していません。それらの環境に貼り付ける場合は、先頭に秒(例: 0)を足すなど方言ごとの調整が必要です。詳しくは下の「方言差」の表を参照してください。

「特定の値」で何も選ばないとどうなりますか?

何も選択していない状態では「*」(毎)として出力され、説明文も「毎分」のように表示されます。値を選ぶと、選んだ値がカンマ区切りで小さい順に並びます。たとえば時のフィールドで18時を選んでから9時を選んでも、出力は 9,18 になります。

「範囲指定」を選んだ直後に 0-1 と表示されるのはなぜですか?

範囲指定は開始と終了の両方を入力して初めて確定します。入力前は既定値として 0-1 が出力され、説明文の該当箇所も未入力の状態で表示されます。入力欄に見えている数値は目安なので、開始・終了の両方を一度入力し直してください。「間隔指定」も同様で、数値を入力する前は */1 が出力されます。

曜日の 0 と 7 の違いと、日と曜日を両方指定したときの扱いは?

このツールの曜日は 0(日曜)〜6(土曜)で、7 は出力しません。多くの cron 実装では 7 も日曜として受け付けます。注意が必要なのは「日」と「曜日」を両方「*」以外にした場合で、crontab(5) ではどちらか一方が一致すれば実行される OR 条件になります。たとえば 0 9 1-5 * 1 は「毎月1〜5日の9時」と「毎週月曜の9時」の両方で動きます。このツールの説明文は両方の条件を並べて表示するだけなので、AND 条件のつもりで使わないでください。

生成した式はどのタイムゾーンで実行されますか?

式自体にタイムゾーン情報は含まれず、実行する側の設定に従います。Linux の crontab はそのサーバーのシステムタイムゾーン(cronie では CRON_TZ 変数で上書き可能)、GitHub Actions の schedule は常に UTC、Kubernetes CronJob は spec.timeZone を指定しない限りコントローラーのタイムゾーンです。UTC で動く環境で日本時間の朝9時に実行したい場合は、9時間引いた 0 0 * * * を指定します。

@daily や @hourly のような書き方には対応していますか?

対応していません。@reboot・@hourly・@daily・@weekly・@monthly・@yearly は Vixie cron 系で使える短縮表記ですが、このツールは常に5フィールド形式で出力します。同じ意味の式は 0 * * * *(@hourly)、0 0 * * *(@daily)、0 0 * * 0(@weekly)、0 0 1 * *(@monthly)、0 0 1 1 *(@yearly)で表せます。

設定したのにコマンドが実行されません。

cron 特有の原因として、PATH が最小限(多くの環境で /usr/bin:/bin)であること、相対パスやシェルのエイリアスが使えないこと、コマンド中の % が改行として解釈されること(date +%Y のような % は \% とエスケープが必要)が挙げられます。実行された記録は /var/log/cron や journalctl -u cron で確認できます。crontab の保存後にエラーが出ていないかも確認してください。

役立つTips

フルパスと環境変数

cron はログインシェルの .bashrc や .profile を読み込みません。コマンド・スクリプト・入出力ファイルはすべて絶対パスで書き、必要な環境変数は crontab の先頭で PATH=... のように定義してください。

ログを残す

コマンド末尾に >> /var/log/myjob.log 2>&1 を付けると標準出力と標準エラーをファイルに追記できます。cron は出力があるとメールで通知しようとするため、出力先を明示しておくと管理しやすくなります。

毎分実行(* * * * *)の多重起動

5フィールドすべてが「毎」の状態は1分ごとの実行を意味します。処理が1分以内に終わらないと前回分と同時に走るため、flock -n /tmp/job.lock コマンド のように排他ロックを併用するのが一般的です。

月末や第N曜日は5フィールドでは表せない

「毎月末日」「第2月曜」は標準の5フィールド構文では指定できません。月末は 28〜31日に実行しつつコマンド側で翌日が1日かを判定する方法、または Quartz 系の L や # 記法が使える環境で設定する方法があります。

関連ツール