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 で必ず結果を記録
関連記事: