CentOSでシェルスクリプトをcronで定期実行する方法

定期的にシェルスクリプト(例:clean_logs.sh)を自動実行させる方法をステップバイステップで解説します。CentOSやWSL2環境にも対応しています。


1. スクリプトに実行権限を付与する

まず、作成したシェルスクリプトに実行権限を付けます。

chmod +x /home/youruser/scripts/clean_logs.sh

2. スクリプト内のコマンドはフルパスで指定する

cronでは環境変数が限定されているため、findrmなどのコマンドもフルパスで記述します。

#!/bin/bash
LOG_DIR="/var/log/httpd"
FIND_BIN="/usr/bin/find"
RM_BIN="/usr/bin/rm"

$FIND_BIN "$LOG_DIR" -name "*.log" -mtime +90 -exec $RM_BIN -f {} \;

3. crontabに登録する

次に、crontabにスクリプトを登録します。

crontab -e

エディタが開いたら、以下のように記述します。

0 2 * * * /home/youruser/scripts/clean_logs.sh >> /var/log/clean_logs.log 2>&1

この例では、毎日2:00にスクリプトを実行し、ログは/var/log/clean_logs.logに出力されます。

曜日・時間の設定パターン

フィールド意味設定例
0〜590(ちょうど0分)
0〜232(午前2時)
1〜31*(毎日)
1〜12*(毎月)
曜日0〜6(日=0)*(毎日)

週1回だけ実行したい場合(毎週日曜深夜)

0 0 * * 0 /home/youruser/scripts/clean_logs.sh >> /var/log/clean_logs.log 2>&1

4. 登録内容を確認する

crontab -l

5. ログ出力場所についての注意点

cronによる出力は通常、メール送信または/var/log/cronに記録されます。任意のファイルにログを残したい場合は、リダイレクトを使用してください:

>> /var/log/clean_logs.log 2>&1

6. WSL2環境での注意点

WSL2ではcronデーモンが自動起動しないため、手動で起動が必要です。

# Ubuntu系の場合
sudo service cron start

# CentOS系の場合
sudo /etc/init.d/crond start

起動確認:

ps aux | grep cron

WSL2でcronを自動起動したい場合は、.bashrcに記述するなどの対応が必要です。


まとめ

やることコマンド・説明
スクリプトに実行権限を付けるchmod +x script.sh
crontabを編集するcrontab -e
フルパス指定で登録する/full/path/to/script.shを記述
WSL2ではcronの起動が必要sudo /etc/init.d/crond startなどで手動起動
登録結果を確認するcrontab -l

設定ファイルやコマンド内容が不安な場合は、確認・アドバイスも可能です。ぜひお気軽にご相談ください。

Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です