開発ツール
cron式の書き方・スケジュール設定の完全ガイド
cronはLinux/Unixシステムで定期的なタスクを自動実行するためのスケジューラです。バックアップ、ログのローテーション、メール送信など、繰り返し実行するジョブの設定に欠かせません。この記事では、cron式の構文から実用的なパターンまで徹底解説します。
cronとは
cron(クロン)は、指定した時刻やスケジュールでコマンドを自動実行するデーモン(常駐プログラム)です。設定はcrontab(cron table)と呼ばれるファイルで管理します。
# crontabの編集 crontab -e # 現在のcrontabを表示 crontab -l # crontabを削除 crontab -r
cron式の5フィールド構造
┌───────────── 分 (0-59) │ ┌───────────── 時 (0-23) │ │ ┌───────────── 日 (1-31) │ │ │ ┌───────────── 月 (1-12) │ │ │ │ ┌───────────── 曜日 (0-7, 0と7は日曜) │ │ │ │ │ * * * * * コマンド
| フィールド | 範囲 | 説明 |
|---|---|---|
| 分 | 0-59 | 何分に実行するか |
| 時 | 0-23 | 何時に実行するか(24時間表記) |
| 日 | 1-31 | 何日に実行するか |
| 月 | 1-12 | 何月に実行するか |
| 曜日 | 0-7 | 何曜日に実行するか(0=日, 1=月, ...7=日) |
特殊文字の使い方
| 文字 | 意味 | 例 |
|---|---|---|
| * | すべての値 | * * * * *(毎分) |
| , | 複数の値 | 0,15,30,45 * * * *(0,15,30,45分) |
| - | 範囲 | 0 9-17 * * *(9時〜17時の毎正時) |
| / | 間隔 | */5 * * * *(5分ごと) |
よく使うcron式パターン集
| cron式 | スケジュール |
|---|---|
| * * * * * | 毎分実行 |
| */5 * * * * | 5分ごと |
| 0 * * * * | 毎時0分(1時間ごと) |
| 0 0 * * * | 毎日深夜0時 |
| 0 9 * * 1-5 | 平日の午前9時 |
| 0 9,18 * * * | 毎日9時と18時 |
| 30 2 * * 0 | 毎週日曜の午前2:30 |
| 0 0 1 * * | 毎月1日の深夜0時 |
| 0 0 1 1 * | 毎年1月1日の深夜0時 |
| 0 3 * * 1 | 毎週月曜の午前3時(週次バックアップ) |
| */10 9-17 * * 1-5 | 平日の営業時間中10分ごと |
| 0 0 15 * * | 毎月15日の深夜(給料日処理など) |
cronの注意点
タイムゾーン:cronはサーバーのシステム時刻で動作します。UTCとJSTの差(+9時間)に注意してください。
PATH環境変数:cronはユーザーのシェル環境を引き継がないため、コマンドはフルパスで指定するか、crontab内でPATHを設定してください。
出力のリダイレクト:出力を> /dev/null 2>&1にリダイレクトしないと、実行のたびにメールが送信される場合があります。
よくある質問
cronジョブが動かない原因は?
よくある原因:1. PATH未設定でコマンドが見つからない 2. パーミッション不足 3. crontabの書式エラー 4. ログを確認(/var/log/cron または journalctl)
秒単位のスケジュールはできますか?
標準のcronは分単位が最小です。秒単位が必要な場合は、systemd timerやスクリプト内でsleepを使う方法があります。
cronとsystemd timerの違いは?
systemd timerはより柔軟な設定(起動後の遅延実行、依存関係の定義など)が可能ですが、cronはシンプルで広く普及しています。