‘log取り’ タグのついている投稿

Visitorsでログ取りするスクリプトに恥ずかしいバグが・・・

2010年7月4日 スクリプト関連, 雑記

何だか2日に実行し忘れて後日処理を行ったときの月次処理が行われないとか、圧縮ファイルを作るときに含まれているべきファイルが抜けているとか色々恥ずかしい感じのところを修正した。
使い方はこのページにある通り

#!/bin/bash
### kotokoilogs_v3.1
drv () {
    cat access_log${2} >>acl${1}.txt
    visitors -A -m 250 acl${1}.txt >acl${1}.html
}
ext () {
    local rnmMt=`date -d "$(( 2 + ${dag} )) days ago" '+%Y%m'`
    echo ${rnmMt}
    mv acl1.txt acl${rnmMt}.txt
    mv acl1.html ./monthly/acl${rnmMt}.html
    zip -5 acl${rnmMt}.zip acl${rnmMt}.txt ./monthly/acl${rnmMt}.html ./daily/*.*
    rm acl${rnmMt}.txt ./daily/*.*
    cp access_log${2} acl1.txt
}
logs () {
    wget -P "/home/user/dir/logs" "ftp://ID:PASS@domain/../logs/access_log${2}"
    drv 2 ${2}
    local Dt=`date -d "${dag} days ago" '+%d'`
    case "${Dt}" in
        #今日は2日です
        02 ) ext 0 ${2} ;;
        #今日は2日ではありません
        * ) echo "通常処理" ;;
    esac
    drv 1 ${2}
    visitors -A -m 250 access_log${2} >./daily/${ymd}.html
    rm "access_log${2}"
    case "${1}" in
        0 ) echo "完了" ;;
        * ) epiphany ./daily/${ymd}.html acl1.html acl2.html ;;
    esac
}
cd '/home/user/dir/logs'
case "${2}" in
    [1-6] ) dag=${2}
    bkdate=_${2}
    ;;
    * ) dag=0 ;;
esac
ymd=`date -d "${dag} days ago" '+%Y%m%d'`
case "${1}" in
    0 ) logs 1 ${bkdate} ;;
    1 ) epiphany ./daily/${ymd}.html acl1.html acl2.html ;;
    * ) logs 0 ;;
esac
### ${ymd}.html -- 日次
### acl1.html -- 月次
### acl2.html -- 累積

Visitorsでログ取りするスクリプト更新した。

2010年5月25日 スクリプト関連, 雑記

v3になりまひた。いひひ。
変更点は手動でログ取りやっててうっかり何日か取り忘れたときの過去のログの取得機能の追加だけ。

自分の借りてるスペースは1週間分しかログを残してくれないので、その前提で書いてあります。ログのファイル名形式とかも同じ。

使い方はいつも通りワンパターンな引数つけて起動するタイプ。
第一引数はスクリプト自体の動作を指定。0ならログとってブラウザで表示。1ならログとらずにブラウザで表示。無印ならログだけとる。
第二引数は何日前のログをとるのかを指定。1~6まで。自分の借りてるスペースは1週間分しかログを残してくれないので。

なんでこんな突貫工事をしちゃったのかというと、まさに今日、昨日のログを取り忘れていたから。どうせ今後も中途半端な頻度で忘れるので毎度面倒くさがりながら前日分のログを手動で連結するくらいなら突貫工事でもいいから書いちゃえよって思ったの。

古いコードはこことかにある。どこが変わったかとか興味があったらどうぞ。「Visitorsでアクセスログを読み(ry」を書き直し。

#!/bin/sh
### v3
drv () {
    cat access_log$2 >>acl$1.txt
    visitors -A -m 250 acl$1.txt >acl$1.html
}
ext () {
    rnmMt=`date -d ‘2 days ago’ ‘+%Y%m’`
    mv acl1.txt acl$rnmMt.txt
    mv acl1.html acl$rnmMt.html
    zip -5 acl$rnmMt.zip acl$rnmMt.txt acl$rnmMt.html ./daily/*.*
    rm acl$rnmMt.txt ./daily/*.*
    cp access_log$2 acl1.txt
}
logs () {
    wget -P “/home/user/logs” “ftp://id:pass@domain/logdirs/access_log$2”
    drv 2 $2
    Dt=`date ‘+%d’`
    case “$Dt” in
        #今日は2日です
        02 ) ext 0 $2 ;;
        #今日は2日ではありません
        * ) echo “通常処理” ;;
    esac
    drv 1 $2
    visitors -A -m 250 access_log$2 >./daily/$ymd.html
    rm “access_log$2”
    case “$1” in
        0 ) echo “完了” ;;
        * ) epiphany ./daily/$ymd.html acl1.html acl2.html ;;
    esac
}
cd ‘/home/user/logs’
case “$2” in
    [1-6] ) dag=$2
    bkdate=_$2
    ;;
    * ) dag=0 ;;
esac
ymd=`date -d “$dag days ago” ‘+%Y%m%d’`
case “$1” in
    0 ) logs 1 $bkdate ;;
    1 ) epiphany ./daily/$ymd.html acl1.html acl2.html ;;
    * ) logs 0 ;;
esac

これで、おかたづけまで完璧だ。

2010年2月25日 Linux, スクリプト関連, 雑記

こうで、

ext () {
  rnmMt=`date -d ‘2 days ago’ ‘+%Y%m’`
  mv acl1.txt acl$rnmMt.txt
  mv acl1.html acl$rnmMt.html
  zip -5 acl$rnmMt.zip acl$rnmMt.txt acl$rnmMt.html
  rm acl1.txt acl$rnmMt.txt
  cp access_log acl1.txt
}

↓↓↓↓↓

ext () {
  rnmMt=`date -d ‘2 days ago’ ‘+%Y%m’`
  mv acl1.txt acl$rnmMt.txt
  mv acl1.html acl$rnmMt.html
  zip -5 acl$rnmMt.zip acl$rnmMt.txt acl$rnmMt.html ./daily/*.*
  rm acl1.txt acl$rnmMt.txt ./daily/*.*
  cp access_log acl1.txt
}

こう。

visitors -A -m 250 access_log >$ymd.html

↓↓↓↓↓

visitors -A -m 250 access_log >./daily/$ymd.html

※太字が追加部分。
これならファイルが増えすぎて泣くこともない。
【「Visitorsでアクセスログを読み(ry」を書き直し。】の差分。これでばっちり。

「Visitorsでアクセスログを読み(ry」を書き直し。

2010年2月25日 Linux, スクリプト関連, 雑記

【Visitorsでアクセスログを読みやすくしたりその他いろいろ。】のスクリプトをもっとスマートにできないものかと思って書き直してみた。
書き直しついでに日次ログも残すようにしてみた。使い方はそのまま。

なんかまたやらなきゃいけない処理が増えた気がするので日次処理しない方がいい気もしないでない。
これだと日次ログが雪だるま式に増えて行くことになるし・・・

#!/bin/sh
drv () {
  cat access_log >>acl$1.txt
  visitors -A -m 250 acl$1.txt >acl$1.html
}
ext () {
  rnmMt=`date -d ‘2 days ago’ ‘+%Y%m’`
  mv acl1.txt acl$rnmMt.txt
  mv acl1.html acl$rnmMt.html
  zip -5 acl$rnmMt.zip acl$rnmMt.txt acl$rnmMt.html
  rm acl1.txt acl$rnmMt.txt
  cp access_log acl1.txt
}
logs () {
  wget -P ‘/home/user/dir/logs’ ‘ftp://user:pass@server/dir/logname’
  visitors -A -m 250 access_log >$ymd.html
  drv 2
  Dt=`date ‘+%d’`
  case “$Dt” in
    #今日は2日です
    02 ) ext ;;
    #今日は2日ではありません
    * ) echo “通常処理” ;;
  esac
  drv 1
  case “$1” in
    0 ) echo “完了” ;;
    * ) epiphany $ymd.html acl1.html acl2.html ;;
  esac
  rm ‘access_log’
}
cd ‘/home/user/dir/logs’
ymd=`date ‘+%Y%m%d’`
case “$1” in
  0 ) logs ;;
  1 ) epiphany $ymd.html acl1.html acl2.html ;;
  * ) logs 0 ;;
esac

Visitorsでアクセスログを読みやすくしたりその他いろいろ。

2010年2月4日 Linux, スクリプト関連, 雑記

今日はちょっと気分を変えてシェルスクリプトを一つ。
アクセスログを読みやすくしてローカルに溜め込むスクリプトです。
溜め込みついでに月ごとのログとログ取り開始からの累積ログの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日追記
ああ、そうだ。書き忘れてたけどもインデントを全角スペースに変換してあるからコピーしただけじゃ動かないかも。