mod_log_rotate
良いらしい。エコらしい
http://d.hatena.ne.jp/hirose31/20090311/12...
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ってどこにあるのー!
→/usr/sbin/rotatelogs2 にありました
windowsについてくるやつはいくつもプロセスが立ち上がって終了しない!おわってる!
サイズであれする
/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?logrotat...