はじめに

こんにちは!今回はcrontabコマンドについて解説します。

crontabは、定期的にコマンドやスクリプトを自動実行するためのスケジュール管理コマンドです。「毎日午前3時にバックアップ」「毎週月曜日にレポート作成」「5分おきにログチェック」といった定期実行タスクを設定できます。

自動化の要!これを使いこなせると、作業がめっちゃ楽になりますよ。

crontabコマンドとは

crontabは、cron(クロン)デーモンによって実行されるスケジュールタスクを管理する外部コマンドです。“cron table"の略ですね。

各ユーザーが独自のcrontabファイルを持ち、そこに実行したいコマンドと実行スケジュールを記述します。一度設定すれば、指定した時刻に自動的にタスクが実行されるので、手動でやってた繰り返し作業から解放されます。

基本構文

1
crontab [オプション]

crontabファイルの各行は、以下の形式で記述します。

1
分 時 日 月 曜日 コマンド

主なオプション

オプション 説明
-e crontabファイルを編集(edit)
-l 現在のcrontabファイルを表示(list)
-r crontabファイルを削除(remove)
-i 削除前に確認(-rと併用)
-u ユーザー名 指定したユーザーのcrontabを操作(root権限必要)

使用例

例1: crontabファイルを表示

1
crontab -l

実行結果:

1
2
3
4
5
# 毎日午前3時にバックアップ
0 3 * * * /home/user/backup.sh

# 毎時0分にログをチェック
0 * * * * /usr/local/bin/check_logs.sh

現在設定されているcronジョブが一覧表示されます。まだ何も設定していない場合は「no crontab for user」と表示されます。

例2: crontabファイルを編集

1
crontab -e

実行結果:

1
(デフォルトエディタでcrontabファイルが開く)

初回実行時はエディタの選択を求められます。nano、vim、emacsなどから選べます。

例3: 毎日午前3時に実行

1
2
3
crontab -e
# 以下を追加
0 3 * * * /home/user/backup.sh

実行結果:

1
crontab: installing new crontab

毎日午前3時にbackup.shスクリプトが実行されます。

例4: 毎時0分に実行

1
2
3
crontab -e
# 以下を追加
0 * * * * /usr/local/bin/check_logs.sh

実行結果:

1
crontab: installing new crontab

毎時ちょうど(1:00、2:00、3:00…)に実行されます。

例5: 5分おきに実行

1
2
3
crontab -e
# 以下を追加
*/5 * * * * /home/user/monitor.sh

実行結果:

1
crontab: installing new crontab

0分、5分、10分、15分…と5分ごとに実行されます。*/5が「5分おき」を意味します。

例6: 毎週月曜日の午前9時に実行

1
2
3
crontab -e
# 以下を追加
0 9 * * 1 /home/user/weekly_report.sh

実行結果:

1
crontab: installing new crontab

曜日は0(日曜)〜6(土曜)、または7(日曜)で指定します。1は月曜日です。

例7: 毎月1日の午前0時に実行

1
2
3
crontab -e
# 以下を追加
0 0 1 * * /home/user/monthly_cleanup.sh

実行結果:

1
crontab: installing new crontab

毎月1日の深夜0時に月次処理が実行されます。

例8: 平日の午前8時〜午後6時、毎時0分に実行

1
2
3
crontab -e
# 以下を追加
0 8-18 * * 1-5 /home/user/business_hours_check.sh

実行結果:

1
crontab: installing new crontab

月曜〜金曜(1-5)の8時〜18時の間、毎時0分に実行されます。

例9: 特定の月だけ実行

1
2
3
crontab -e
# 以下を追加
0 9 1 1,7 * /home/user/special_task.sh

実行結果:

1
crontab: installing new crontab

1月と7月の1日、午前9時に実行されます。

例10: crontabファイルを削除

1
crontab -r -i

実行結果:

1
crontab: really delete user's crontab? (y/n) y

-iオプションで確認メッセージが表示されます。安全に削除できます。

例11: 標準出力とエラー出力をログに保存

1
2
3
crontab -e
# 以下を追加
0 3 * * * /home/user/backup.sh >> /home/user/backup.log 2>&1

実行結果:

1
crontab: installing new crontab

実行結果をログファイルに追記します。2>&1でエラー出力も同じファイルに保存されます。

例12: 環境変数を設定して実行

1
2
3
4
5
6
crontab -e
# 以下を追加
PATH=/usr/local/bin:/usr/bin:/bin
MAILTO=[email protected]

0 3 * * * /home/user/backup.sh

実行結果:

1
crontab: installing new crontab

crontabの先頭で環境変数を設定できます。MAILTOを設定すると、エラーがあった時にメールで通知されます。

Tips・注意点

cron時刻指定のフォーマット

1
2
3
4
5
6
7
*    *    *    *    *
│    │    │    │    │
│    │    │    │    └─ 曜日 (0-7, 0と7は日曜日)
│    │    │    └────── 月 (1-12)
│    │    └─────────── 日 (1-31)
│    └──────────────── 時 (0-23)
└───────────────────── 分 (0-59)

特殊文字:

  • *: すべての値にマッチ
  • ,: 複数の値を指定(例: 1,3,5
  • -: 範囲を指定(例: 1-5
  • /: 間隔を指定(例: */5は5おき)

PATHに注意

cronで実行されるコマンドは、限定的なPATH環境変数で実行されます。

1
2
3
4
5
6
# フルパスで指定するのが安全
0 3 * * * /usr/bin/python3 /home/user/script.py

# またはcrontabでPATHを設定
PATH=/usr/local/bin:/usr/bin:/bin
0 3 * * * python3 /home/user/script.py

コマンドが見つからないエラーを防ぐため、フルパスで指定しましょう。

エラーの確認方法

cronのエラーは通常、システムログに記録されます。

1
2
3
4
5
# cronのログを確認
sudo tail -f /var/log/syslog | grep CRON

# または
sudo journalctl -u cron -f

うまく動かない時は、まずログを確認!

@記法(特殊な時刻指定)

よく使うスケジュールには、簡単な記法が用意されています。

1
2
3
4
5
6
7
8
@reboot        # システム起動時
@yearly        # 年1回(0 0 1 1 *)
@annually      # @yearlyと同じ
@monthly       # 月1回(0 0 1 * *)
@weekly        # 週1回(0 0 * * 0)
@daily         # 日1回(0 0 * * *)
@midnight      # @dailyと同じ
@hourly        # 時1回(0 * * * *)

例:

1
@daily /home/user/backup.sh

cronとcrontabの違い

  • cron: タスクを実行するデーモン(常駐プログラム)
  • crontab: cronのスケジュールを管理するコマンド

crontabコマンドでスケジュールを設定し、cronデーモンが実行する、という関係です。

実践的な使い方

毎日のバックアップ自動化

1
2
3
crontab -e
# 毎日午前3時にバックアップ、ログも保存
0 3 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

深夜の時間帯に自動でバックアップが実行されます。

ディスク容量の定期監視

1
2
3
crontab -e
# 1時間おきにディスク使用量をチェック
0 * * * * df -h | mail -s "Disk Usage Report" [email protected]

ディスク容量をメールで定期レポート。

Webサイトの死活監視

1
2
3
crontab -e
# 5分おきにWebサイトをチェック
*/5 * * * * /usr/local/bin/check_website.sh

サイトがダウンしていたら、スクリプトでアラートを送信できます。

古いログファイルの削除

1
2
3
crontab -e
# 毎週日曜日の午前2時に30日以上前のログを削除
0 2 * * 0 find /var/log/myapp -name "*.log" -mtime +30 -delete

ディスク容量を節約するため、古いログを自動削除。

データベースのバックアップ

1
2
3
crontab -e
# 毎日午前4時にMySQLをバックアップ
0 4 * * * /usr/bin/mysqldump -u backup_user -p'password' mydb > /backup/mydb_$(date +\%Y\%m\%d).sql

日付付きでデータベースをバックアップします。%\%とエスケープが必要です。

システム起動時にスクリプトを実行

1
2
3
crontab -e
# システム起動時にサーバーを起動
@reboot /home/user/start_server.sh

再起動後に自動的にアプリケーションサーバーを起動します。

営業時間中の定期チェック

1
2
3
crontab -e
# 平日9時〜18時、30分おきに在庫チェック
*/30 9-18 * * 1-5 /usr/local/bin/check_inventory.sh

営業時間だけ定期処理を実行。

メンテナンス通知の送信

1
2
3
crontab -e
# 毎月第1日曜日の午前10時に通知
0 10 1-7 * 0 [ "$(date +\%u)" = "7" ] && /usr/local/bin/send_maintenance_notice.sh

月の第1日曜日だけ実行する高度な例です。

まとめ

crontabコマンドのポイント:

  • 定期的なタスクを自動実行するスケジュール管理ツール
  • -e: crontabを編集
  • -l: 現在の設定を表示
  • -r: crontabを削除(-iで確認付き)
  • 時刻指定: 分 時 日 月 曜日 コマンド
  • */5で5分おき、0-23で範囲指定
  • @daily@hourlyなどの特殊記法も便利
  • コマンドはフルパスで指定すると安全
  • ログファイルへのリダイレクトで実行結果を記録
  • よく使う組み合わせ: crontab -e, crontab -l

crontabで繰り返し作業を自動化すれば、人間は創造的な仕事に集中できます。最初は簡単なタスクから始めて、徐々に自動化の範囲を広げていきましょう!