やりたかったこと
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の倍数分ごと」という意味