今日はちょっと気分を変えてシェルスクリプトを一つ。
アクセスログを読みやすくしてローカルに溜め込むスクリプトです。
溜め込みついでに月ごとのログとログ取り開始からの累積ログの2種類を溜め込むようになってます。
使い方は簡単で一日一回、引数0か1か引数なしでスクリプトを呼び出すだけ。
あとは勝手にログを溜め込んで期日(毎月2日)がきたら一ヶ月分の生ログテキストと加工済みログを圧縮して片付けます。自分で使用することのみを想定しているのでそれしかできません。
引数に対応する機能は次の通りです。
・引数0はログの取得/加工後ブラウザで確認
・引数1はログをブラウザで確認のみ
・引数なしはログの取得/加工のみ
という機能・・・のはず。”はず”と言うのはうちでは0しか使ってないからなんですが確認するのも面倒なので自己責任でお願いします。
ちなみにcronで回すのがいいと思います。うちではすぐに確認するので手でやってますが。
アクセスログをローカルで読みやすく加工するためにはアクセス解析ソフトなんかを使うわけなんだけども、今回はVisitorsを使います。
なぜVisitorsかというと、うちで使ってるから。
ではでは早速スクリプトぺたり。
#!/bin/sh
mtth () {
cat ‘acl4.txt’ ‘accesslog’ >’acl3.txt’
cp ‘acl3.txt’ ‘acl4.txt’
visitors -A -m 250 ‘acl4.txt’ >’acl2.html’
}
nml () {
cp ‘acl.txt’ ‘acl2.txt’
visitors -A -m 250 ‘acl2.txt’ >’acl.html’
}
logs () {
wget -P ‘/home/user/dir/logs’ ‘ftp://user:pass@server/dir/logname’
cd ‘/home/user/dir/logs’
Dt=`date ‘+%d’`
if [ $Dt -eq 2 ]
then
#今日は2日です
mtth
rnmMt=`date -d ‘2 days ago’ ‘+%Y%m’`
mv acl2.txt acl$rnmMt.txt
mv acl.html acl$rnmMt.html
zip -5 acl$rnmMt.zip acl$rnmMt.txt acl$rnmMt.html
rm acl.txt acl$rnmMt.txt
cp ‘access_log’ ‘acl.txt’
nml
else
#今日は2日ではありません
mtth
cat ‘acl2.txt’ ‘access_log’ >’acl.txt’
nml
fi
rm ‘access_log’
}
if [ ${1} -eq 0 ]
then
logs
epiphany ‘/home/user/dir/logs/acl.html’ ‘/home/user/dir/logs/acl2.html’
elif [ ${1} -eq 1 ]
then
epiphany ‘/home/user/dir/logs/acl.html’ ‘/home/user/dir/logs/acl2.html’
else
logs
fi
前に上げた株価データ取得スクリプトよりも簡単で説明もクソもないので今回は説明なしです。なんていうか動けばいいやレベルのゴミスクリプトなので。
そうそう、途中に2日か否かを確認する部分があるんですが、これは月ごとに切り分ける必要がなければ不要な部分です。
注意 – このスクリプトを使ったことで何かが起こったとしても責任は負えませんのでそのつもりで使ってください。もし万一使うようなことがあれば・・・ですが。
2月5日追記
ああ、そうだ。書き忘れてたけどもインデントを全角スペースに変換してあるからコピーしただけじゃ動かないかも。
コメントは受け付けていません。