ログローテーションの履歴
logrotate
Unixについてるやつ。
logrotate.confに従ってファイルをリネームする。
/var/logらへんはだいたい標準でやってくれてる。
cronで /etc/cron.daily/logrotate あたりに登録されている。
世代数指定できるが、あんまり大きい数にすると重くなる(かも)
最大数を越えると削除されるので、定期的にアーカイブしなければならない。
apacheのログをローテーションにかけるなら、新しいファイルをapacheに認識させないといけないので再起動しなければならない。
rotatelogs
apacheについてるやつ。
書き出し時に分ける。
apache起動するとrotatelogsというプロセスが立ち上がっている。
こちらの方が処理のタイムラグが少ない。
logrotateと違って削除されることはない。
# CustomLog "|/usr/sbin/rotatelogs /path/to/access.%Y%m%d.log 86400 540" combined
OpenSuSEにrotatelogsってどこにあるのー!
サイズであれする
/path/to/logfle { daily maxage 10 rotate 10 size 10M missingok sharedscripts postrotate /etc/init.d/apache2 reload endscript }
logrotateで日別保存
/path/to/logfile { daily missingok nocompress sharedscripts postrotate EXT=`date --date '1 days ago' '+%Y%m%d'` for f in $1 do if [ ! -f "$f" ]; then /bin/cp $f.1 $f.$EXT fi done /etc/init.d/apache2 reload endscript } * 月別アーカイブ tarするとき毎回cdしなきゃダメなのかなぁ。 この辺がヒントっぽかったけど無理だった http://www.21linux.com/archives/2005/12/tar.html >| #!/bin/sh # # log-archive.sh {baseDirectory} {target} # base=$1 cd $base dir="archive" target="$2" if [ ! -d "$dir" ] ; then mkdir "$dir" fi month=`date +%Y%m` tarFile="$dir/$month.tar.gz" if [ -f $tarFile ] then tar zxvf $tarFile fi if [ -e $target ] then tar zcvf "$tarFile" $target rm -rf $target fi
参考
http://q.hatena.ne.jp/1200448522
http://kamoland.com/wiki/wiki.cgi?logrotate%A4%CE%C0%DF%C4%E...