スペック早見表

crontab書式 早見表|設定例・特殊文字・曜日指定

Linux/Unixの定期実行スケジューラcronの設定書式を一覧化。分・時・日・月・曜日の5フィールド構造、* , - / の特殊文字、「毎日3時」「平日9時」「5分おき」など頻出の設定例17件、@reboot等の省略記法、曜日0/7の扱いや%エスケープといった定番のハマりどころまで、このページだけで確認できます。

📌 まずこれ: crontabの5フィールド構造

┌──────────── 分 (0〜59)
│ ┌────────── 時 (0〜23)
│ │ ┌──────── 日 (1〜31)
│ │ │ ┌────── 月 (1〜12)
│ │ │ │ ┌──── 曜日 (0〜7 ※0と7は日曜)
│ │ │ │ │
* * * * *  実行するコマンド
頻出パターン意味
*/5 * * * *5分おき
0 * * * *毎時0分(1時間ごと)
0 3 * * *毎日 3:00
0 9 * * 1-5平日(月〜金) 9:00
0 0 1 * *毎月1日 0:00
@reboot起動時に1回

※ 左から「分 時 日 月 曜日」の順。時刻は24時間表記。曜日は0と7がどちらも日曜(1=月〜6=土)。

各フィールドの取りうる値

フィールド位置指定できる値補足
1番目0〜59
2番目0〜2324時間表記(午後3時=15)
3番目1〜31存在しない日(2/30等)は実行されない
4番目1〜12jan〜decの英語3文字名も可(実装による)
曜日5番目0〜70と7=日曜、1=月…6=土。sun〜satの英語名も可(実装による)。POSIX標準の範囲は0〜6

※ 全フィールドで * , - / が使えます(下記参照)。5フィールドの後に実行するコマンドを書きます。

🧮 crontab式チェッカー

cron式(5フィールド)を入力すると、日本語の読み下しと次回実行日時5回分をその場で表示します。

使い方: 「分 時 日 月 曜日」の5フィールドを半角スペース区切りで入力すると自動で判定されます(@daily などの省略記法もそのまま入力可)。下の「よく使う設定例」の式をクリックしてもここに読み込まれます。次回実行日時はお使いのブラウザの時刻(日本時間想定)で計算します。

↑ キーワードを入力すると下の設定例一覧が絞り込まれます(空欄で全件表示)。

よく使う設定例 一覧

crontab記述実行タイミング用途例
* * * * *毎分動作テスト・監視スクリプト
*/5 * * * *5分おき(0,5,10,…,55分)死活監視・メトリクス収集
*/15 * * * *15分おき(0,15,30,45分)キャッシュ更新
30 * * * *毎時30分毎時0分のジョブと時間をずらす
0 * * * *毎時0分(1時間ごと)ログローテーション前処理
0 */6 * * *6時間おき(0,6,12,18時の0分)外部APIとの定期同期
0 9-17 * * *9時〜17時の毎時0分営業時間内のみの処理
0 0 * * *毎日 0:00日次集計・日付切替処理
0 3 * * *毎日 3:00日次バックアップ(深夜帯)
30 6 * * *毎日 6:30朝のレポートメール送信
0 9 * * 1毎週月曜 9:00週次レポート
0 0 * * 0毎週日曜 0:00週次メンテナンス
0 9 * * 1-5平日(月〜金) 9:00営業日のみのバッチ
0 4 * * 6毎週土曜 4:00週末のフルバックアップ
0 0 1 * *毎月1日 0:00月次集計・請求処理
0 12 1,15 * *毎月1日と15日の 12:00月2回の定期処理
0 0 1 1 *年1回(1月1日 0:00)年次アーカイブ

※ 実際には各行の末尾に実行するコマンドを続けて書きます(例: 0 3 * * * /usr/local/bin/backup.sh)。各行の式をクリックすると上の式チェッカーで判定できます。

特殊文字の意味

記号意味
*すべての値にマッチ分に * → 毎分
,複数の値を列挙(リスト)分に 0,30 → 0分と30分
-範囲指定曜日に 1-5 → 月〜金
/ステップ(間隔)指定分に */10 → 10分ごと(0,10,20,30,40,50分)

/によるステップ指定はVixie cronの拡張でPOSIX標準にはありませんが、現在のLinuxディストリビューションのcronではほぼ使えます。1-5,10のようにリストと範囲の組み合わせも可能です。

省略記法(ニックネーム)一覧

記法同等の5フィールド表記意味
@reboot(相当なし)cronデーモン起動時(通常はOS起動時)に1回
@yearly / @annually0 0 1 1 *年1回(1月1日 0:00)
@monthly0 0 1 * *月1回(毎月1日 0:00)
@weekly0 0 * * 0週1回(日曜 0:00)
@daily / @midnight0 0 * * *日1回(毎日 0:00)
@hourly0 * * * *毎時0分

※ これらはVixie cron系の拡張機能です。POSIX標準にはないため、環境によっては使えない場合があります。

ハマりどころ4選

① 曜日の0と7はどちらも日曜

Vixie cron系では曜日フィールドの0と7はどちらも日曜日です(1=月、2=火、…、6=土)。ただしPOSIX標準で規定される範囲は0〜6なので、移植性を考えるなら日曜は0で書くのが安全です。

② 「日」と「曜日」の両方を指定するとOR評価

日(第3フィールド)と曜日(第5フィールド)を両方とも*以外にすると、AND(両方満たす日)ではなくOR(どちらかを満たす日)で実行されます。例えば 0 0 13 * 5 は「13日の金曜日」ではなく「毎月13日毎週金曜の両方」の0時に実行されます。この挙動はcrontab(5)マニュアルに明記された仕様です。

③ 環境変数が最小限(PATHに注意)

cronはログインシェルの設定(.bashrc等)を読み込まず、最小限の環境変数で実行します。PATHは /usr/bin:/bin のような短い値のことが多く、「手動では動くのにcronでは動かない」原因の筆頭です。コマンドをフルパスで書くか、crontabの先頭に PATH=/usr/local/bin:/usr/bin:/bin のように書いて対処します。シェルは通常 /bin/sh で実行される点にも注意(bash固有の構文は動きません)。

④ %(パーセント記号)は改行扱い

crontabのコマンド行では、エスケープされていない%は改行に変換され、最初の%以降のテキストはコマンドの標準入力として渡されます。date +%Y%m%d をそのまま書くと壊れるため、date +\%Y\%m\%d のようにバックスラッシュでエスケープしてください。

動作確認のTips

  • 基本コマンド: crontab -e(編集)/ crontab -l(一覧表示)。crontab -r確認なしで全削除されるので、-eとの打ち間違いに要注意。
  • テストは「毎分」から: まず * * * * * /path/to/cmd >> /tmp/cron_test.log 2>&1 のように毎分実行+出力リダイレクトで登録し、ログが書かれることを確認してから本番のスケジュールに変更するのが確実です。
  • 実行ログの場所: 環境により /var/log/cron(RHEL系)、/var/log/syslog(Debian/Ubuntu系)、または journalctl で確認できます。
  • MAILTO: ジョブが標準出力・標準エラーに何か出力すると、cronはcrontab所有者(またはMAILTOで指定した宛先)にメールを送ろうとします。MAILTO="" をcrontab先頭に書くと抑止できます。
  • タイムゾーン: cronは基本的にシステムのタイムゾーンで動きます。サーバーがUTC設定の場合、日本時間9時に動かすには0時(UTC)を指定する必要があります。

使い方・選び方のポイント

使用場面

サーバーの定期バックアップ・ログローテーション・日次バッチ・監視スクリプト・証明書更新など、Linux/Unix上で「決まった時刻に自動実行したい」処理全般に使います。

よくある間違い

①フィールドの順番違い(正しくは分→時の順。「時 分」と逆に書くミスが定番) ②日と曜日の同時指定がORになることを知らずに書く ③PATH未設定でコマンドが見つからない ④%のエスケープ漏れ ⑤crontab -rによる誤消去。

書き方のコツ

①迷ったらこのページの設定例から近いものをコピーして数字だけ変える ②コマンドはフルパスで書く ③出力は必ずログファイルにリダイレクトする ④深夜帯ジョブは他のジョブと時刻をずらして負荷集中を避ける。

よくある質問

Q1. 曜日指定の0と7はどちらが日曜日ですか?

A. 広く使われているcron(Vixie cron系)では0と7の両方が日曜日です。ただしPOSIX標準で規定されている範囲は0〜6(0が日曜)なので、互換性を重視するなら日曜は0で書くのが安全です。

Q2. 「0 0 13 * 5」は13日の金曜日に実行されますか?

A. されません。日(第3フィールド)と曜日(第5フィールド)の両方を*以外で指定すると、両者はOR条件で評価され「毎月13日」と「毎週金曜」の両方の0時に実行されます。13日の金曜日だけに限定したい場合は、コマンド側でdateコマンド等による曜日判定を組み合わせる必要があります。

Q3. 手動では動くコマンドがcronだと動かないのはなぜですか?

A. cronはログインシェルとは別の最小限の環境変数でコマンドを実行するためです。PATHは /usr/bin:/bin のような短い値になっていることが多く、シェルも通常 /bin/sh です。コマンドをフルパスで書くか、crontabの先頭で PATH=... を設定すると解決します。

Q4. dateコマンドの%がcronでエラーになります。なぜですか?

A. crontabのコマンド行では%が改行として扱われ、最初の%以降は標準入力としてコマンドに渡される仕様のためです。date +\%Y\%m\%d のようにバックスラッシュでエスケープしてください。

Q5. 5分おきに実行するにはどう書けばいいですか?

A. 「*/5 * * * * コマンド」と書きます。/はステップ(間隔)を表す記号で、分フィールドの*/5は0,5,10,…,55分を意味します。

Q6. cronで秒単位の実行はできますか?

A. できません。cronの最小単位は分です。秒単位の実行が必要な場合はsystemdタイマーを使うか、1分ごとのジョブの中でsleepを併用する方法が使われます。

Q7. 設定したcrontabが動いているか確認する方法は?

A. crontab -l で登録内容を確認し、まず「* * * * *(毎分)」に出力リダイレクト付きで登録して動作を確かめるのが確実です。実行ログは環境により /var/log/cron や /var/log/syslog、journalctl で確認できます。

Q8. @rebootはいつ実行されますか?

A. cronデーモンの起動時(通常はOSの起動時)に1回だけ実行されます。POSIX標準にはない拡張機能のため、実装によっては使えない場合があります。

cronとcrontabの仕組み・背景

cronはUnix系OSに標準搭載されているジョブスケジューラで、常駐プロセスであるcronデーモン(crond)が毎分登録済みのcrontab(cron table=cronの表)を評価し、現在の時刻にマッチするエントリのコマンドを実行します。起源は1970年代のVersion 7 Unixにさかのぼり、現在広く使われている書式と拡張機能(ステップ指定・ニックネーム等)は1987年に公開されたVixie cronで確立されました。crontabコマンドと5フィールド書式の基本仕様はPOSIX.1にも規定されています。

crontabにはユーザーcrontab(crontab -eで編集し、ユーザーごとに保持される)とシステムcrontab(/etc/crontab/etc/cron.d/ 配下)の2系統があります。システムcrontabは「分 時 日 月 曜日 実行ユーザー名 コマンド」と、コマンドの前にユーザー名フィールドが1つ多い書式です。この違いを知らずに相互コピーすると、ユーザー名がコマンドとして実行されて失敗する(あるいはその逆)という定番のトラブルになります。

cronの弱点は「実行予定時刻に電源が入っていなかったジョブは実行されない」ことです。常時稼働しないマシンでは、未実行分を後追い実行するanacronや、Persistent=trueを指定できるsystemdタイマーが補完手段として使われます。近年のLinuxではsystemdタイマーへの移行も進んでいますが、書式の簡潔さと移植性からcrontabは今も定期実行設定の共通言語であり続けています。

関連する早見表

関連規格・出典

  • POSIX.1(IEEE Std 1003.1)「crontab」 — crontabコマンドと5フィールド書式の標準仕様
  • crontab(5) マニュアル(Vixie cron) — 特殊文字・ニックネーム・環境変数・%の扱い等の仕様
  • cron(8) / crontab(1) マニュアル — デーモンの動作とコマンドの使い方

最終更新: 2026-07-04