[Linux]ログを毎日別ファイルに変換して保存するシェルスクリプト

apacheのアクセスログなんかは放っておくと大量のレコードが登録されている。
さすがにそんなログは見たくないので1日分のログを抽出できるようにしてみた。
ついでにいろんなログファイルを処理してみた。
#logrotate?何それおいしいの?(爆

コードはこれ:

#!/bin/bash
PATH=/bin
 
LOGROOT=/var/log
#DUMPROOT=/root/log
APACHE=$LOGROOT/httpd/
DUMPROOT=$APACHE
TEMP=/tmp
 
TODAY=`date +%F`
 
# Apache log
cat $APACHE/access_log | sed s/^192.168.0.*$n//g | sed s/^127.0.0.1.*$n//g > $TMP/access_log
cp $TMP/access_log $DUMPROOT/access_log_$TODAY
cat /dev/null > $APACHE/access_log
 
cp $APACHE/error_log $DUMPROOT/error_log_$TODAY
cat /dev/null > $APACHE/error_log
 
# others
DUMPROOT=$LOGROOT/dump
mkdir $DUMPROOT 2>/dev/null
LIST="messages cron boot.log mysqld.log secure yum.log"
for f in $LIST
do
cp $LOGROOT/$f $DUMPROOT/${f}_${TODAY}
cat /dev/null > $LOGROOT/$f
done
 
# cups
CUPS=$LOGROOT/cups
DUMPROOT=$CUPS
LIST="access_log error_log page_log"
 
for f in $LIST
do
cp $CUPS/$f $DUMPROOT/${f}_${TODAY}
cat /dev/null > $CUPS/$f
done

ログファイルを「ファイル名_yyyy-mm-dd」にコピーして、元のファイルを空にするだけ。

パイプでsedに渡しているのはローカルからのアクセスログを排除する為。
必要に応じてログから除外するIPアドレスを指定してやればおk。

※実際に使用する前に必ず動作確認を行ってください。使ったことでログ消失があっても責任は負えませぬ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です