2026年10月17日

2026年10月17日

crontabの書き方と設定方法

はじめに

cron はLinuxで定期的にコマンドを実行するための仕組みで、crontab (cron table) はユーザーごとのジョブ一覧を編集するコマンドです。バックアップ、ログ整理、SSL証明書の自動更新、定期スクリプト実行など、サーバー運用の自動化に欠かせません。

書式は分・時・日・月・曜日の5フィールド + コマンドというシンプルな構造ですが、ハマりやすい落とし穴も多いため、本記事で確実に書けるようになりましょう。

症状・背景

crontab が必要になる主な場面:

  • 毎日定時のバックアップ実行
  • 数分ごとのログ監視や死活確認
  • SSL証明書の自動更新 (certbot renew)
  • 週次レポートメールの送信

手順・設定方法

ステップ1: crontabの基本

# 自分のcrontabを編集
crontab -e

# 現在の登録内容を表示
crontab -l

# crontabを削除
crontab -r

# 他ユーザーのcrontabを操作 (root権限)
sudo crontab -u www-data -l

ステップ2: 書式の理解

*  *  *  *  *  実行するコマンド
│  │  │  │  │
│  │  │  │  └─ 曜日 (0-7, 0と7は日曜)
│  │  │  └──── 月 (1-12)
│  │  └─────── 日 (1-31)
│  └────────── 時 (0-23)
└───────────── 分 (0-59)
# 毎分実行
* * * * * /usr/local/bin/check.sh

# 毎日午前3時に実行
0 3 * * * /usr/local/bin/backup.sh

# 平日の9時〜18時、15分おきに
*/15 9-18 * * 1-5 /usr/local/bin/poll.sh

# 毎月1日の0時5分に実行
5 0 1 * * /usr/local/bin/monthly.sh

ステップ3: 特殊文字と省略形

# 特殊文字
# *   すべての値
# ,   複数指定 (0,15,30,45)
# -   範囲指定 (9-17)
# /   ステップ指定 (*/5 で5分おき)

# よく使う省略形
@reboot   /usr/local/bin/onboot.sh   # 起動時に1回
@daily    /usr/local/bin/daily.sh    # 毎日0時 (= 0 0 * * *)
@hourly   /usr/local/bin/hourly.sh   # 毎時0分
@weekly   /usr/local/bin/weekly.sh   # 毎週日曜0時
@monthly  /usr/local/bin/monthly.sh  # 毎月1日0時

ステップ4: ログとデバッグ

# cron実行ログを確認 (Ubuntu)
sudo grep CRON /var/log/syslog

# Red Hat系
sudo journalctl -u crond -n 50

# 標準出力・エラーをファイルに保存
0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

# 出力を破棄
0 3 * * * /usr/local/bin/backup.sh > /dev/null 2>&1

# 環境変数を設定
PATH=/usr/local/bin:/usr/bin:/bin
MAILTO=admin@example.com
0 3 * * * backup.sh

注意事項

  • cronの環境変数は最小限 (PATHすら短い) です。スクリプト内で絶対パスを使うのが安全
  • ログを残さないと失敗に気付けません。必ず >> log 2>&1 で記録する習慣を
  • 重複実行を防ぐにはロック (flock) を使うか、スクリプト側で排他制御を
  • MAILTO を設定すると出力がメール送信されますが、メール環境がないと溜まり続けるので注意

まとめ

1. 編集: crontab -e で自分用ジョブを記述

2. 書式: 分・時・日・月・曜日 + コマンドの5フィールド

3. 省略: @daily @reboot などの省略形を活用

4. 記号: */5 (5分おき)、1-5 (平日) を使い分け

5. ログ: >> log 2>&1 で必ず結果を記録

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ
▲