今更ではあるが、毎日ログファイルをローテーション
Linux には、logrotate というツールはあるので、それを使えばいいのだけれども、
http://linuxcommand.org/man_pages/logrotate8.html
http://linux.die.net/man/8/logrotate
あえて簡単にシェルで書くなら、というメモである。
サンプル
-----------------------
#!/bin/bash
export LOGDIR=/var/log/httpd
export LOGFILES="access_log error_log mod_jk.log"
export keep=8
export today=`date +%Y%m%d`
export deleteday=`date +%Y%m%d --date "$keep day ago"`
for f in $LOGFILES; do
/bin/cp -p $LOGDIR/$f $LOGDIR/$f.$today
/bin/gzip -f $LOGDIR/$f.$today
/bin/cp /dev/null $LOGDIR/$f
/bin/rm -r $LOGDIR/$f.$deleteday.gz > /dev/null 2>&1
done
-----------------------
cron 設定の例、
0 0 * * * /usr/local/bin/logrotate.sh > /dev/null 2>&1
crond を再起動
/etc/init.d/crond stop
/etc/init.d/crond start
以下のようにログはローテートされる。
/var/log/httpd/access_log
/var/log/httpd/access_log.20130807.gz
/var/log/httpd/access_log.20130806.gz
/var/log/httpd/access_log.20130805.gz
/var/log/httpd/access_log.20130804.gz