2011年6月2日木曜日

シェルスクリプトサンプル:ログファイル等のアーカイブ

独自開発したアプリケーションのログ等でローテート処理が考慮されていない場合、
ログファイルが増殖し続け、気づいた時にはエライことになっていたなんてことは
誰しもあるはずです。

古くなってきたログファイルを洗い出して圧縮し、さらに一定期間が過ぎると自動削除
するシェルスクリプトを作成しcrontabに登録しておけば、ディスク使用率アラートで
夜中に起こされて対応することはなくなるはずです。


■シェルスクリプトサンプル
#!/bin/sh
# 指定日数より前のファイルを圧縮し、さらに指定日数より古いアーカイブファイルを削除

ARCHIVE_DAYS=10
DELETE_DAYS=60
TARGET_DIR=/root/scripts/logs
OUTPUT=${TARGET_DIR}/`date +%Y%m%d-%H%M`_ArchiveFiles.tar.gz

# 対象ディレクトリへ移動
cd ${TARGET_DIR}

# 圧縮するファイル(拡張子は、.logまたは.txt)のリストを作成
find . -mtime +${ARCHIVE_DAYS} -iregex ".*\.log$\|.*\.txt$" > ${TARGET_DIR}/file.list

# 圧縮対象ファイルが存在するかのチェック
num_line=`cat ${TARGET_DIR}/file.list | wc -l`
if [ ${num_line} -gt 0 ]; then

 # リストに従ってtar.gzファイルを作成
tar -zcf ${OUTPUT} -T ${TARGET_DIR}/file.list

 # リストに従って元ファイルを削除
for i in `cat ${TARGET_DIR}/file.list`
 do
 rm -rf ${i}
 done

else
 echo "ERROR: More than ${ARCHIVE_DAYS} days before the file does not exist !!"
fi

# 指定日数より古いアーカイブファイルを削除
find . -mtime +${DELETE_DAYS} -regex ".*\.tar.gz$" | xargs rm -rf

# リストファイルを削除
# rm -rf ${TARGET_DIR}/file.list

exit 0

こちらの情報が何かのお役に立てましたら幸いです。サイト継続のご協力ありがとうございます。m(_ _)m

0 件のコメント:

コメントを投稿