- 追加された行はこの色です。
- 削除された行はこの色です。
**概要 [#hbc557a7]
apacheのログをローテーションさせ、前日の日付のログを書き出すスクリプト。~
ログローテーションの際にはapacheのプロセス再起動が行われる。~
~
主な機能は下記~
主な機能
-apacheのログを指定された世代分保管してローテーションさせる
-/YYYY/MM/の形式のディレクトリを自動生成する
-[LOGFILE].[YYYYMMDD]の形式で前日分のログを切り出す
本スクリプトは4つのスクリプトにて構成されている。
-httpd_logrotate.sh ~
全体を制御するスクリプト。他のスクリプトはこのスクリプトから呼び出される
-logrotate.sh~
ログのローテーションを行うスクリプト
-make_date-dir.sh~
YYYY/MM形式のディレクトリを生成するスクリプト
-logcut.sh~
指定日付のログを切り出すスクリプト
**使い方 [#k6d0fe17]
**httpd_logrotate.sh [#fbdf4189]
環境ごとの変更箇所は下記
DOMAIN1= 元ログファイルの保管位置
DOMAIN2= 元ログファイルの保管位置(複数ドメイン時)
HTTPCTRL= apacheのプロセス再起動に使用するapachectlの保管場所(絶対パス)
LOGROTATE= logrotate.shの保管場所(絶対パス)
MKDATEDIR= make_date-dir.shの保管場所(絶対パス)
LOGCUT= logcut.shの保管場所(絶対パス)
LOGFILE= ローテーションの稼動ログ(絶対パス)
** [#w9e9fa6c]
#!/bin/sh
# -----------------------------
# Apache Log Management Script
# -----------------------------
# Version : 1.1
# update : 2007.02.22
export LANG=C
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
## Base Directory
DOMAIN1="/home/httpd/labala/logs/"
DOMAIN2="/home/httpd/johannaho/logs/"
## SystemPermSet
HTTPCTRL="/etc/init.d/apachectl"
LOGROTATE="/home/system/script/httpd_log/logrotate.sh"
MKDATEDIR="/home/system/script/httpd_log/make_date-dir.sh "
LOGCUT="/home/system/script/httpd_log/logcut.sh"
LOGFILE="/home/system/logs/httpd_logrotate.log"
# Last Date
DATEY=`date +%Y --date '1 days ago'`
DATEM=`date +%m --date '1 days ago'`
DATED=`date +%d --date '1 days ago'`
TODAY=`date +%Y%m%d`
LASTDAY=`date +%Y%m%d --date '1 days ago'`
## Start Log
STARTDATA=`date +%Y/%m/%d\ %H:%M:%S`
echo $STARTDATA - LogRotate Start >> $LOGFILE
## Apache Stop
$HTTPCTRL stop >> $LOGFILE
sleep 5
## LogRotate
#
# USE : $LOGROTATE [RotateTarget FullPath]
#
$LOGROTATE $DOMAIN1/access.log
$LOGROTATE $DOMAIN1/error.log
$LOGROTATE $DOMAIN2/access.log
$LOGROTATE $DOMAIN2/error.log
## Apache Start
TRYCOUNT=1
RETRY=10
while [ $TRYCOUNT -le $RETRY ];
do
ps ax | grep apache | grep httpd > /dev/null
if [ $? = 1 ]; then
$HTTPCTRL start >> $LOGFILE
sleep 10
fi
TRYCOUNT=$(($TRYCOUNT+1))
done
## Make Directory
$MKDATEDIR $DOMAIN1/log_archive/
$MKDATEDIR $DOMAIN2/log_archive/
## Logcut
$LOGCUT $DATEY$DATEM$DATED access_log $DOMAIN1/log_archive/$DATEY/$DATEM/access_log.$DATEY$DATEM$DATED $DOMAIN1/access*
$LOGCUT $DATEY$DATEM$DATED access_log $DOMAIN2/log_archive/$DATEY/$DATEM/access_log.$DATEY$DATEM$DATED $DOMAIN2/access*
## End Log
ENDDATA=`date +%Y/%m/%d\ %H:%M:%S`
echo $ENDDATA - LogRotate End >> $LOGFILE
# EOF
**logrotate.sh [#rfa1d4c1]
使用の際に特に設定は不要です。~
単体で稼動させる際には下記の書式で実行します。~
-使用方法
./logrotate.sh [ローテート対象を絶対パスで指定]
-例
./logrotate.sh /usr/local/apache/log/access_log
#!/bin/sh
# ------------------------
# HTTP Log Rotate Script
# ------------------------
# Version : 1.1
# update : 2007.02.22
export LANG=C
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
# Set
ROTATE="40"
# Check
if [ -f $1 ]; then
LOG=$1
else
echo "ERR : logfile not found"
echo "USE : ./logrotate.sh [/PATH/LOGFILE]"
exit 0
fi
# Ecex
test -f $LOG.$ROTATE && rm -rf $LOG.$ROTATE
while [ $ROTATE -ge 1 ];
do
i=$((ROTATE-1))
if [ -f $LOG.$i ]; then mv $LOG.$i $LOG.$ROTATE ; fi
ROTATE=$i
done
mv $LOG $LOG.1
touch $LOG
# EOF