ファイルを毎日、ローテート

今更ではあるが、毎日ログファイルをローテーション
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