スクリプトで行う定期的なログ削除の自動化の事例
ログを採取したまま放っておくと、いつしかログファイルでディスクは一杯になってしまうおそれがあり、ログを定期的に削除する必要が出てきます。スクリプトで行う定期的なログ削除の自動化の事例をあげてみました。
ログ削除スクリプトを作って crontab に登録し定期的に実行する
ログ削除スクリプトを作成、そのスクリプトを crontab に登録し毎日定期的に実行することでログ削除の自動化を実現するようにします。
crontab コマンドは、コマンドの定時実行のスケジュール管理を行うために用いられるOSに用意されているコマンドです。crontab にてスケジュールに基づいた実行を定義しておくことができます。
以下は、30日前のログについて自動的に削除を行うスクリプトと、毎日深夜のAM1:00になったら crontab コマンドでそのスクリプトを実施する事例です。
- ログ削除スクリプトの作成
rootでログインし、ディレクトリを移動します。
cd /usr/local/mta/bin/
viエディタで実行するスクリプトを作成します。
vi logclean.sh
-
[logclean.sh] の内容(30日前の過去ログを削除)
# 30日前日付を算出する 'YYMMDD'
MyStr=`date -v-30d '+%y%m%d'`.log
# 削除するファイルをフルパス指定 (コメント行は acceptlog を直接指定する場合の指定。第1引数でログディレクトリを指定するには'$1'を記述する)
HN=`hostname`
#MyFn='/var/spool/epms/acceptlog/'${HN}'/'${MyStr}
MyFn='/var/spool/epms/'$1'/'${HN}'/'${MyStr}
echo ${MyFn}
# ファイル削除実行
echo rm -f ${MyFn}
rm -f ${MyFn}
指定された日以前のすべての過去ログを削除したい場合は次のように記述します。
-
[logclean2.sh] の内容(30日以前のすべての過去ログを削除)
# ファイルのタイムスタンプで判断した現行日より30日前の指定
MyStr='*.log -mtime +30'
# 削除するファイルをフルパス指定 (コメント行は acceptlog を直接指定する場合の指定。第1引数でログディレクトリを指定するには'$1'を記述する)
HN=`hostname`
#MyFn='/var/spool/epms/acceptlog/'${HN}'/'${MyStr}
MyFn='/var/spool/epms/'$1'/'${HN}'/'${MyStr}
echo ${MyFn}
# 指定日以前のファイル削除一括実行
find ${MyFn} | xargs rm
- ログ削除スクリプトの実行権設定
作成した logclean.sh に実行権を設定します。
chmod 744 logclean.sh
crontab コマンドで指定する前に手動でスクリプトを実行してみて、対象のログ削除命令とその動作がされているか確認してみてもよいでしょう。
./logclean.sh acceptlog
※うまく動かない場合は sh logclean.sh acceptlog でも動作しないか試してみてください。
- crontab の編集
crontab コマンドで処理時間と実行するスクリプトを指定します。
crontab -e
-
[crontab -e] での設定内容(毎日AM1:00にacceptlog、inlog、pop3logの過去ログ削除を実行する例)
0 1 * * * /usr/local/mta/bin/logclean.sh acceptlog
0 1 * * * /usr/local/mta/bin/logclean.sh inlog
0 1 * * * /usr/local/mta/bin/logclean.sh pop3log
※うまく実行できない場合は sh /usr/local/... と記述してみてください。
※他にも対象となるログがある分だけ記述を増やしてください。
crontab -e で指定できる時分の設定内容やその他の設定方法については参考サイトをご参照ください。
- ログ削除スクリプト実行の確認
crontab コマンドで指定された時刻まで待ち、時間後に対象のログが削除されていることを確認します。