「毎日深夜にバックアップを自動実行したい」「5分ごとに死活監視スクリプトを動かしたい」そんなときに使うのが cron(クーロン)です。
cronとは?
cron はLinuxに標準搭載されたジョブスケジューラです。指定した日時・間隔でコマンドやスクリプトを自動実行します。設定は crontab(cron table)ファイルに記述します。
crontabの書式
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設定例
# 毎日午前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 書式の読み方
| フィールド | 値の範囲 | 意味 |
|---|---|---|
| 分 | 0〜59 | 何分に実行するか |
| 時 | 0〜23 | 何時に実行するか |
| 日 | 1〜31 | 何日に実行するか |
| 月 | 1〜12 | 何月に実行するか |
| 曜日 | 0〜7(0と7は日曜) | 何曜日に実行するか |
| *(アスタリスク) | — | すべての値に一致 |
| */5 | — | 5の倍数ごと(5分ごとなど) |
よく使うcron設定パターン
| 設定 | 実行タイミング |
|---|---|
| 0 2 * * * | 毎日深夜2時 |
| 0 * * * * | 毎時0分 |
| */5 * * * * | 5分ごと |
| 0 9 * * 1 | 毎週月曜日の朝9時 |
| 0 0 1 * * | 毎月1日の深夜0時 |
| @reboot | 起動時に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入門チートシート完全版で全コマンドを一気に復習できます。



コメント