cron 式ジェネレーター — cron スケジュールを作成・解説
ドロップダウンから cron スケジュールを作成するか貼り付けると、わかりやすい日本語で読み、次の 10 回の実行時刻をローカル時刻と UTC で確認できます。無料、ブラウザで動作。
分 · 時 · 日 · 月 · 曜日。名前(JAN、MON)、@daily のようなマクロ、crontab の 1 行をまるごと貼り付けることもできます。
範囲または間隔(1-5)を使っています。式の入力欄で編集するか、下で値を選ぶと置き換わります。
…
cron は、実行されるマシンのタイムゾーンでスケジュールを解釈します。GitHub Actions、Vercel、ほとんどの CI ランナーやクラウドのスケジューラーでは「UTC」を選んでください。2 つの列は同じ瞬間を示しています。
crontab -l の出力を貼り付けてください。コメントと VAR=value の行はスキップされます。
| 5 分ごとに実行。 /usr/local/bin/healthcheck.sh | |
| 02:30に実行。 /usr/local/bin/backup.sh --full | |
| 毎日(月曜日〜金曜日)の09:00に実行。 php /var/www/artisan reports:send | |
| 日曜日の00:00に実行。 certbot renew --quiet |
| 10 分ごとに API やキューをポーリング | |
| 6 時間ごと(00:00、06:00、12:00、18:00) | |
| 毎晩 02:30 にバックアップ | |
| 平日の業務時間中に 1 時間ごと | |
| 業務時間中に 30 分ごと | |
| 毎週日曜 0 時(@weekly と同じ) | |
| 月 2 回:1 日と 15 日の 08:00 | |
| 月末の数日(スクリプト内で明日が 1 日かを確認) | |
| 土曜 03:00 のメンテナンス時間 | |
| 四半期ごと:1月・4月・7月・10月の 1 日 04:15 | |
| 金曜日または 13 日(OR ルールの例) | |
| マクロ:毎日 0 時に 1 回 |
すべてブラウザ内で動作します。入力内容が送信・保存されることはありません。 すべての無料ツールを見る.
不具合や改善できそうな点を見つけましたか?いただいたメッセージはすべて読み、すぐに対応します。
この無料の cron 式ジェネレーターは、ドロップダウンから 5 フィールドの cron スケジュールを作成し、どんな式もわかりやすい日本語で読み解いて、次の 10 回の実行時刻をローカル時刻と UTC で一覧表示します。式、crontab の 1 行、crontab 全体のどれを貼り付けても、すべてのスケジュールを解説します。crontab、GitHub Actions、Kubernetes の CronJob、Vercel cron など、ほとんどのスケジューラーが共通で使う標準の書式を理解します。アスタリスク、リスト、範囲、ステップ、月と曜日の名前、@daily などのマクロです。
cron の書式は簡潔なぶん容赦がありません。「0 0 1 * *」と「0 0 * * 1」は似ていますが、毎月 1 日と毎週月曜日という別の意味です。スケジュールを言葉と具体的な日付で確認できるかどうかが、平日 9:00 に動くジョブと、日曜日の 09:00 UTC に動くジョブを分けます。このページはまさにその間違いを防ぐためにあります。計算は Vixie cron の仕様に厳密に従っており、日のフィールドがアスタリスクで始まると 2 つの日のフィールドの組み合わせ方が変わる、という癖も再現します。Quartz の書式(秒フィールド、L、W、#)には対応しておらず、貼り付けるとその旨を表示します。
使い方
- プリセットや例から始めるか、式を入力または貼り付けます(crontab の行を丸ごと貼り付けると、スケジュール部分だけを取り出します)。編集すると同時に、説明と次回の実行時刻が更新されます。
- 5 つのフィールドエディターで、分、時、日、月、曜日を「毎回」「N ごと」「特定の値」で設定します。
- 次の 10 回の実行時刻を確認します。サーバーや CI ランナーで動くジョブなら、ほぼ必ず UTC を使うので「UTC」を選んでください。各実行時刻はローカル時刻と UTC の両方で表示されます。
- 既存のサーバーを点検するには、crontab -l の出力を「crontab 全体を解説」に貼り付けます。
- 式をコピーするか、説明をコメントとして付けた crontab の行全体をコピーします。
- crontab -e、GitHub Actions の schedule: ブロック、Kubernetes の CronJob の spec、またはお使いのプラットフォームの cron 設定に貼り付けます。
よくある質問
5 つのフィールドはそれぞれ何を意味しますか?
順に、分(0〜59)、時(0〜23)、日(1〜31)、月(1〜12 または JAN〜DEC)、曜日(0〜7 または SUN〜SAT、0 と 7 はどちらも日曜日)です。アスタリスクはすべての値、1-5 は範囲、1,15 はリスト、*/10 は 10 ごとを意味します。
日と曜日の両方を指定するとどうなりますか?
標準の(Vixie)cron は、両方ではなくどちらかが一致したときにジョブを実行します。「0 0 13 * FRI」は 13 日の金曜日だけでなく、毎月 13 日と毎週金曜日に実行されます。このページもそのルールに従います。1 つ細かい点があります。どちらかの日のフィールドがアスタリスクで始まる場合(たとえば */2)、Vixie cron はそれを制限なしとみなして両方の一致を求めるので、「0 0 */2 * 1」は奇数日かつ月曜日という意味になります。Quartz は異なり、使わないフィールドを ? で示します。
cron はどのタイムゾーンを使いますか?
実行するマシンやサービスのタイムゾーンです。個人のサーバーはたいていローカル時刻を使い、クラウドのランナー、GitHub Actions、Vercel、ほとんどの Kubernetes クラスターは UTC を使います。UTC のランナーで 9:00 に設定したジョブは、トロントでは夏は 5:00、冬は 4:00 に実行されます。実行時刻の表にはすべての時刻がローカル時刻と UTC の両方で表示されるので、ずれが一目でわかります。
秒や L、W、# の拡張に対応していますか?
いいえ。6 フィールド(秒付き)の書式と、L(最終)、W(平日)、#(第 n 曜日)の拡張は、Quartz や一部のエンタープライズ向けスケジューラーのもので、標準の cron にはなく、ほとんどのプラットフォームで拒否されます。「毎月最終金曜日」が必要なら、毎週金曜日に動くジョブの中で日付を確認するのが、移植性のある方法です。
ジョブが一度も実行されないのはなぜですか?
よくある原因は、スケジュールは正しいが存在しない日付(4 月 31 日、2 月 30 日)を指定している、サーバーのタイムゾーンが想定と違う、crontab の行にコマンドがない、またはコマンドの PATH がシェルと異なる、実行間隔がジョブ自体の実行時間より短くてインスタンスが溜まっていく、などです。ここにある次回実行時刻の一覧で、最初の 2 つは見つけられます。
cron の書式リファレンス
• * すべての値 · 5 ちょうど 5 · 1-5 範囲 · 1,3,5 リスト · */15 15 ごと · 1-30/5 1 から 30 まで 5 ごと
• 名前:月は JAN〜DEC、曜日は SUN〜SAT(大文字・小文字は区別しない)。名前の範囲も使えます(MON-FRI)。
• @hourly(0 * * * *)、@daily または @midnight(0 0 * * *)、@weekly(0 0 * * 0)、@monthly(0 0 1 * *)、@yearly または @annually(0 0 1 1 *)。@reboot は起動時に 1 回実行します。crontab はこれらを受け付けますが、すべてのプラットフォームが対応しているわけではありません。移植性があるのは 5 フィールドの形式です。
• 曜日の 0 と 7 はどちらも日曜日です。範囲は折り返せません。FRI-MON はエラーなので、FRI-SAT,SUN-MON または 5,6,0,1 と書きます。
• フィールドは空白で区切ります。crontab では同じ行にコマンドが続きます。
cron スケジュールを書く場所
Linux と macOS:crontab -e で、1 行に 1 ジョブ、式の後にコマンドを書きます。GitHub Actions:on: schedule: - cron: '0 9 * * 1-5' で、常に UTC、混雑時は実行が数分遅れることがあります。Kubernetes:CronJob の schedule フィールドです。Vercel:vercel.json の crons に path と schedule を書き、UTC です。クラウドのスケジューラー(AWS EventBridge、Google Cloud Scheduler)も、方言の小さな違いはあるものの同じ書式を受け付けます。EventBridge には年のフィールドが加わります。
次回の実行時刻の計算方法
計算ツールは、現在から 1 日ずつ先へ進みます。各日について、まず月を、次に日と曜日のフィールドを Vixie のルール(両方が制限されていれば OR、どちらかが * で始まれば AND)で確認し、そのうえで一致する時と分を列挙します。現在の分より厳密に後でない実行は飛ばすので、ちょうど今の分に実行予定のジョブは次回の実行時刻で表示されます。
ローカルのタイムゾーンでは、夏時間が影響します。時計を進める日に存在しない時刻(北米の大部分では 02:30)は飛ばされ、時計を戻すときに 2 回ある時刻は 1 回だけ実行されます。これは cronie が固定時刻のジョブを扱う方法です。他のデーモンでは異なる場合があり、これもサーバーがたいてい cron を UTC で動かす理由の 1 つです。
存在しない日付(2 月 30 日、4 月 31 日)を指定したスケジュールは実行されることがなく、ページにその旨が表示されます。2 月 29 日のスケジュールはうるう年にだけ実行されます。検索は 9 年先まで行うので、現実のスケジュールなら十分です。