apacheのログローテーションスクリプト のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- apacheのログローテーションスクリプト へ行く。
- 1 (2007-03-07 (水) 12:09:22)
- 2 (2007-03-07 (水) 12:38:34)
- 3 (2007-05-11 (金) 22:13:52)
- 4 (2007-07-10 (火) 11:51:18)
概要 †
apacheのログをローテーションさせ、前日の日付のログを書き出すスクリプト。
ログローテーションの際にはapacheのプロセス再起動が行われる。
主な機能
- apacheのログを指定された世代分保管してローテーションさせる
- /YYYY/MM/の形式のディレクトリを自動生成する
- [LOGFILE].[YYYYMMDD]の形式で前日分のログを切り出す
本スクリプトは4つのスクリプトにて構成されている。
- httpd_logrotate.sh
全体を制御するスクリプト。他のスクリプトはこのスクリプトから呼び出される - logrotate.sh
ログのローテーションを行うスクリプト - make_date-dir.sh
YYYY/MM形式のディレクトリを生成するスクリプト - logcut.sh
指定日付のログを切り出すスクリプト
httpd_logrotate.sh †
環境ごとの変更箇所は下記
DOMAIN1= 元ログファイルの保管位置 DOMAIN2= 元ログファイルの保管位置(複数ドメイン時) HTTPCTRL= apacheのプロセス再起動に使用するapachectlの保管場所(絶対パス) LOGROTATE= logrotate.shの保管場所(絶対パス) MKDATEDIR= make_date-dir.shの保管場所(絶対パス) LOGCUT= logcut.shの保管場所(絶対パス) LOGFILE= ローテーションの稼動ログ(絶対パス)
#!/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 †
使用の際に特に設定は不要です。
単体で稼動させる際には下記の書式で実行します。
- 使用方法
./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