Linux入門

cronで定期実行を自動化する【crontab完全ガイド】

Linux入門
記事内に広告が含まれています。

「毎日深夜にバックアップを自動実行したい」「5分ごとに死活監視スクリプトを動かしたい」そんなときに使うのが cron(クーロン)です。

cronとは?

cron はLinuxに標準搭載されたジョブスケジューラです。指定した日時・間隔でコマンドやスクリプトを自動実行します。設定は crontab(cron table)ファイルに記述します。

crontabの書式

crontabの書式 分・時・日・月・曜日の読み方
▲ 5つのフィールド(分・時・日・月・曜日)の後にコマンドを記述。*はすべて、*/5は5ごと、1,15はカンマで複数指定

crontabの編集・確認

# crontabを編集(viまたはnanoが開く)
$ crontab -e

# 現在のcrontabを表示
$ crontab -l

# 特定ユーザーのcrontabを編集(root権限が必要)
$ sudo crontab -u www-data -e

# crontabを削除(注意:すべての設定が消える)
$ crontab -r

⚠️ 重要:cronのコマンドはフルパスで指定してください。cronはシェルの PATH 環境変数が通常と異なるため、backup.sh ではなく /home/user/backup.sh のように絶対パスで指定します。

よく使う設定パターン

よく使うcron設定パターン早見表
▲ @rebootや@dailyなどの特殊文字列も使える。*/5は5分ごとの意味

実践的なcron設定例

# 毎日午前2時にバックアップを実行し、ログを記録
0 2 * * * /home/user/backup.sh >> /var/log/backup.log 2>&1

# 5分ごとに死活監視スクリプトを実行(出力を捨てる)
*/5 * * * * /usr/local/bin/healthcheck.sh > /dev/null 2>&1

# 毎週月曜日の3時にaptで更新(サーバー管理の定番)
0 3 * * 1 /usr/bin/apt update && /usr/bin/apt upgrade -y > /dev/null 2>&1

# OS再起動時にアプリを起動
@reboot /home/user/start_app.sh

>> /var/log/backup.log 2>&1 の意味:標準出力と標準エラー出力の両方をログファイルに追記します。> /dev/null 2>&1 は出力をすべて捨てます。

cronのログを確認する

# cronのログをjournalctlで確認(Ubuntu 16.04以降)
$ journalctl -u cron

# syslogからcronのログを確認
$ grep CRON /var/log/syslog | tail -20

# リアルタイムでcronのログを追う
$ journalctl -u cron -f

よくあるつまずきポイント

  • crontab の末尾には必ず空行を入れる:最後の行に改行がないとcronがその行を無視することがあります。crontab -e で編集後、最終行の後に Enter を1回押しておきましょう。
  • コマンドは必ずフルパスで指定:cronの PATH は通常のシェルより短く、/usr/local/bin などが含まれないことがあります。python ではなく /usr/bin/python3 のように絶対パスで書きましょう。実行するスクリプトのパスも同様です。
  • 出力はリダイレクトで保存またはメール送信される:出力を捨てる場合は > /dev/null 2>&1、ログに残す場合は >> /path/to/logfile 2>&1 を末尾に付けます。

まとめ

  • crontabの書式は 分 時 日 月 曜日 コマンド の5フィールド
  • crontab -e で編集、crontab -l で確認
  • コマンドは必ずフルパスで指定(PATH環境変数が異なるため)
  • 出力は >> ログファイル 2>&1 でログに記録するか > /dev/null 2>&1 で捨てる
  • @reboot は起動時実行、@daily は毎日午前0時
  • 実行履歴は journalctl -u cron または grep CRON /var/log/syslog で確認

関連記事

📋 Linux入門チートシート完全版で全コマンドを一気に復習できます。

コメント

タイトルとURLをコピーしました