やりたかったこと

Linuxでスクリプトを定期的に自動実行したかった。 Cronを使うと指定した時間にコマンドを自動実行できる。

環境

  • Linux(Ubuntu / Debian)
  • WSL2

Cronの基本

crontabを編集する

crontab -e    # 現在のユーザーのcrontabを編集
crontab -l    # 現在の設定を表示
crontab -r    # crontabを削除

cron式の書き方

分 時 日 月 曜日 コマンド
*  *  *  *  *

よく使う設定例

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

# 毎週月曜日の9時に実行
0 9 * * 1 /home/user/weekly.sh

# 毎時0分に実行
0 * * * * /home/user/hourly.sh

# 5分ごとに実行
*/5 * * * * /home/user/check.sh

# 毎月1日の0時に実行
0 0 1 * * /home/user/monthly.sh

実際の設定例

crontab -e

エディタが開いたら以下を追加する。

# ログファイルを毎日削除
0 3 * * * find /var/log/myapp -name "*.log" -mtime +7 -delete

# 毎分スクリプトを実行してログに記録
* * * * * /home/user/script.sh >> /var/log/cron.log 2>&1

Cronのログを確認する

grep CRON /var/log/syslog
tail -f /var/log/cron.log

ハマったポイント

  • Cronはフルパスでコマンドを指定する(/usr/bin/python3 など)
  • 環境変数はCronでは引き継がれない
  • 2>&1 をつけるとエラーもログに記録できる
  • */5 は「5の倍数分ごと」という意味

関連記事