cron 式ジェネレーター
crontab のスケジュールを書いて読み解きます。cron 式を入力すると、いつ実行されるかを言葉で示し、次の実行時刻と、五つのフィールドそれぞれの意味を表示します。
毎分。
次の実行
時刻はお使いのパソコンのタイムゾーン()で表示しています。cron はサーバーのタイムゾーンを使うため、同じとは限りません。
よく使うスケジュール
選ぶと上の欄に入ります。
| * * * * * | 毎分 |
| */5 * * * * | 5分ごと |
| */15 * * * * | 15分ごと |
| */30 * * * * | 30分ごと |
| 0 * * * * | 毎時 |
| 0 */2 * * * | 2時間ごと |
| 0 */6 * * * | 6時間ごと |
| 0 */12 * * * | 1日2回 |
| 0 0 * * * | 毎日0時 |
| 0 9 * * * | 毎日午前9時 |
| 0 9 * * 1-5 | 平日の午前9時 |
| 0 9 * * 6,0 | 土曜日と日曜日の9時 |
| 0 0 * * 1 | 毎週月曜日の0時 |
| 0 18 * * 5 | 毎週金曜日の18時 |
| 0 0 1 * * | 毎月1日 |
| 0 0 1 1 * | 毎年1月1日 |
各フィールドの意味
| フィールド | 使える値 |
|---|---|
| 分 | 0 – 59 |
| 時 | 0 – 23 |
| 日 | 1 – 31 |
| 月 | 1 – 12, JAN – DEC |
| 曜日 | 0 – 6, SUN – SAT (0 = 7) |
特別な記号
| 記号 | 意味 |
|---|---|
| * | 任意の値 |
| , | 並べた値を区切る |
| - | 値の範囲 |
| / | 範囲内の間隔 |
ショートカット
| @yearly, @annually | 0 0 1 1 * |
| @monthly | 0 0 1 * * |
| @weekly | 0 0 * * 0 |
| @daily, @midnight | 0 0 * * * |
| @hourly | 0 * * * * |
| @reboot | — |
POSIX の cron にはありませんが、ほとんどの実装が受け付けます。
つまずきやすいところ
- 日と曜日の両方を指定すると、cron はどちらか一方に当てはまる日に実行します。両方を満たす日ではありません。「* * 3 * 1」は毎月3日と毎週月曜日に走ります。例外は、どちらかがアスタリスクで始まる場合です。「* * */2 * 1」は、奇数日でありかつ月曜日である日にしか走りません。マニュアルはこの点を誤って説明しています。
- サーバーを、そして cron も UTC で動かしてください。夏時間のあるタイムゾーンで書いたスケジュールは、年に一度実行を飛ばし、次の切り替えで一度重複します。
- 標準の cron には秒や年のフィールドがありません。その精度が必要なら、cron は適した道具ではありません。
- @reboot は避けてください。マシンがどう再起動されたか、その瞬間にどのサービスが準備できていたかに左右され、筋道を立てて考えにくくなります。
- 五つのフィールドに収まらないスケジュールは、二行に分けられます。90分ごとに実行したいなら「0 */3 * * *」と「30 1/3 * * *」を並べて書いてください。
- コマンドは絶対パスで書いてください。cron は非常に短い PATH で動き、シェルが持つ環境変数はほとんど引き継ぎません。
cron 式のよくある質問
五つのフィールドの意味は。
順に、分・時・日・月・曜日です。アスタリスクのフィールドはすべての値に一致します。
日曜日は 0 ですか、7 ですか。
どちらもです。ほとんどの実装が日曜日として 0 と 7 の両方を受け付け、SUN から SAT の三文字表記も使えます。
思っていた時刻にジョブが走らなかったのはなぜですか。
よくある原因は、サーバーが別のタイムゾーンにあること、上で述べた日と曜日の規則、あるいは cron がシェルのプロファイルを読み込まないためにコマンドが失敗することです。
このページは入力した式をどこかへ送りますか。
送りません。式の解析も実行時刻の計算もブラウザーの中で行われ、何も送信されません。