cron式の確認

crontab の書き方が何時に動くのかを日本語で説明します。次に実行される日時を5回分表示するので、思ったとおりか確かめられます。 設定する前の確認にどうぞ。

意味月〜金曜 9〜17時台に10分おきに実行

フィールドごとの内訳

フィールド入力意味当てはまる数
*/100〜50のうち6個6
9-179〜179
*毎日31
*毎月12
曜日1-5月〜金5

次に実行される日時(日本時間)

計算中…

よく使う例

次回実行の計算は日本時間で行っています。サーバーのタイムゾーンが UTC の場合は9時間ずれるので、date コマンドで確認してください。解析はすべて端末内で行われ、入力は送信されません。

5つのフィールド

cron式はスペース区切りの5つの数字で、左から 分・時・日・月・曜日です。 すべてのフィールドの条件を満たしたときに実行されます(曜日と日だけは例外。後述)。

位置フィールド範囲
1つ目059
2つ目023
3つ目131
4つ目112
5つ目曜日07(0と7が日曜)

使える記号

記号意味
*そのフィールドのすべての値* * * * * → 毎分
,複数を並べる0 9,18 * * * → 9時と18時
-範囲0 9-17 * * * → 9時から17時
/いくつおきか*/15 * * * * → 15分おき
英語3文字月と曜日は名前でも書ける0 0 * jan mon → 1月の月曜

いちばん間違えやすいところ

「日」と「曜日」を両方指定すると、どちらか一方に合えば実行されます。他のフィールドはすべて満たす必要がある(AND)のに、ここだけ OR になります。

意図しがちな読み方実際の動き
0 0 13 * 513日の金曜だけ13日 または 金曜のたびに実行
0 0 1 * *毎月1日毎月1日(曜日が * なので日だけで判定)
0 0 * * 1毎週月曜毎週月曜(日が * なので曜日だけで判定)

「毎月13日で、かつ金曜のときだけ」を cron 単体で書くことはできません。 どちらかを * にして、残りの条件はスクリプトの先頭で判定するのが定石です。

@ から始まる書き方

書き方同じ意味の式タイミング
@yearly0 0 1 1 *毎年1月1日 0時0分
@annually0 0 1 1 *毎年1月1日 0時0分
@monthly0 0 1 * *毎月1日 0時0分
@weekly0 0 * * 0毎週日曜 0時0分
@daily0 0 * * *毎日 0時0分
@midnight0 0 * * *毎日 0時0分
@hourly0 * * * *毎時0分

設定するときの注意

  • タイムゾーンを確認する。サーバーがUTCだと日本時間より9時間前にずれます。CRON_TZ=Asia/Tokyo を書いて明示できます。
  • 0時台に集中させない。多くのジョブが同時刻に走ると負荷が偏ります。分をずらすだけで避けられます。
  • 多重起動を防ぐ。前回が終わる前に次が始まることがあります。flock で排他をかけるのが簡単です。
  • 環境変数は引き継がれない。cron の環境は対話シェルと違うので、PATH を明示するか絶対パスで書きます。
  • 出力を捨てない。標準出力と標準エラーをログに残しておくと、失敗したときに原因を追えます。

よくある質問

「日」と「曜日」を両方指定するとどうなりますか?

どちらか一方に合えば実行されます(OR)。たとえば 0 0 13 * 5 は「13日」または「金曜日」のどちらでも動くので、13日の金曜日だけではありません。他のフィールドはすべて満たす必要がある(AND)ので、ここだけ扱いが違います。片方を * にすればもう片方だけで判定されます。

曜日の0と7はどちらも日曜ですか?

はい。cronでは曜日を0〜6(日〜土)で表しますが、7も日曜として受け付ける実装が一般的です。sun・mon のような英語3文字でも指定できます。当ツールはどちらの書き方も同じものとして扱います。

*/5 と 0-59/5 は同じですか?

同じです。どちらも0分から5分おきという意味になります。ただし 5/10 のように開始値を書いた場合は「5分から10分おき(5, 15, 25…)」となり、0分は含みません。開始位置を変えたいときに使います。

@daily などの書き方は使えますか?

使えます。@yearly・@annually・@monthly・@weekly・@daily・@midnight・@hourly に対応しており、それぞれ対応する5フィールドの式に展開して解釈します。なお @reboot は起動時に一度だけ実行するもので、時刻が決まらないため当ツールでは扱いません。

表示される次回実行の時刻がサーバーとずれます。

このツールは日本時間で計算しています。サーバーのタイムゾーンがUTCだと9時間ずれるため、date コマンドや timedatectl でサーバー側の時刻設定を確認してください。crontab に CRON_TZ=Asia/Tokyo を書いて明示する方法もあります。

入力した内容は送信されますか?

いいえ。解析も次回実行の計算もすべてブラウザ内で行われ、入力内容が外部へ送信・保存されることはありません。

関連ツール

日時の差や翌日の計算は 日付計算時間計算、 サーバーのログに出る時刻は Unixタイムスタンプ変換 で読めます。 海外のサーバーとの時差は 世界時計・時差、 日時の書式を揃えるなら 日時フォーマット変換 をどうぞ。 設定ファイルの確認には JSON整形正規表現テスト、 一意なジョブIDには UUID生成 が使えます。