cron式の確認
crontab の書き方が何時に動くのかを日本語で説明します。次に実行される日時を5回分表示するので、思ったとおりか確かめられます。 設定する前の確認にどうぞ。
フィールドごとの内訳
| フィールド | 入力 | 意味 | 当てはまる数 |
|---|---|---|---|
| 分 | */10 | 0〜50のうち6個 | 6 |
| 時 | 9-17 | 9〜17 | 9 |
| 日 | * | 毎日 | 31 |
| 月 | * | 毎月 | 12 |
| 曜日 | 1-5 | 月〜金 | 5 |
次に実行される日時(日本時間)
計算中…
よく使う例
次回実行の計算は日本時間で行っています。サーバーのタイムゾーンが UTC の場合は9時間ずれるので、date コマンドで確認してください。解析はすべて端末内で行われ、入力は送信されません。
5つのフィールド
cron式はスペース区切りの5つの数字で、左から 分・時・日・月・曜日です。 すべてのフィールドの条件を満たしたときに実行されます(曜日と日だけは例外。後述)。
| 位置 | フィールド | 範囲 |
|---|---|---|
| 1つ目 | 分 | 0〜59 |
| 2つ目 | 時 | 0〜23 |
| 3つ目 | 日 | 1〜31 |
| 4つ目 | 月 | 1〜12 |
| 5つ目 | 曜日 | 0〜7(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 * 5 | 13日の金曜だけ | 13日 または 金曜のたびに実行 |
0 0 1 * * | 毎月1日 | 毎月1日(曜日が * なので日だけで判定) |
0 0 * * 1 | 毎週月曜 | 毎週月曜(日が * なので曜日だけで判定) |
「毎月13日で、かつ金曜のときだけ」を cron 単体で書くことはできません。 どちらかを * にして、残りの条件はスクリプトの先頭で判定するのが定石です。
@ から始まる書き方
| 書き方 | 同じ意味の式 | タイミング |
|---|---|---|
@yearly | 0 0 1 1 * | 毎年1月1日 0時0分 |
@annually | 0 0 1 1 * | 毎年1月1日 0時0分 |
@monthly | 0 0 1 * * | 毎月1日 0時0分 |
@weekly | 0 0 * * 0 | 毎週日曜 0時0分 |
@daily | 0 0 * * * | 毎日 0時0分 |
@midnight | 0 0 * * * | 毎日 0時0分 |
@hourly | 0 * * * * | 毎時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生成 が使えます。