Top/Linux/logrotate

logrotateはてなブックマーク

ログファイルを定期的にローテートするツール。

一世代だけローテートし、それ以前は日付を付加してbzip2圧縮 Permalinkはてなブックマーク

前の週のログを見ることはよくあるが、それ以前を見ることは稀。
しかし、ログは全て残しておきたい。
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

参考

差分 一覧