logrotate
ログファイルを定期的にローテートするツール。
一世代だけローテートし、それ以前は日付を付加してbzip2圧縮
前の週のログを見ることはよくあるが、それ以前を見ることは稀。
しかし、ログは全て残しておきたい。
compressとolddirではイマイチな人向け。
こんな感じになる
$ ls -RF /var/log/apache2
/var/log/apache2:
access.log
access.log.1
old/
/var/log/apache2/old:
access.log.20060903.bz2
access.log.20060910.bz2
access.log.20060917.bz2
設定
vi /etc/logrotate.d/apache2
/var/log/apache2/*.log {
weekly
missingok
rotate 2
notifempty
create 640 root adm
sharedscripts
postrotate
if [ -f /var/run/apache2.pid ]; then
/etc/init.d/apache2 restart > /dev/null
fi
DATE=`date -d '2 weeks ago' +%Y%m%d`
DIR=`echo ${1%/*}`/old
if [ ! -d ${DIR} ]; then
mkdir ${DIR}
fi
for f in ${1}; do
if [ -f ${f}.2 ]; then
NAME=${DIR}/${f##*/}.${DATE}
mv ${f}.2 ${NAME}
bzip2 ${NAME}
fi
done
endscript
}
備考
ログローテートの前回実行日
cat /var/lib/logrotate/status