#!/bin/bash
PRG="$0"
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`/"$link"
fi
done
BASEDIR=`dirname "$PRG"`
PID_DIR=/var/run
source $BASEDIR/global_profile
if [ $# -eq 0 ];then
echo "$(date)|请使用startup.sh脚本启动服务,如果需要手动触发该脚本请传递一个服务名称`cat $LOG_FILE_LIST|grep -v "^#"|grep -v "^$"|awk '{print $2}'|xargs`其中一个."
exit 0
elif [ $# -eq 1 ];then
if [ ! -e $LOG_FILE_LIST ]||[ ! -s $LOG_FILE_LIST ];then
echo "$(date)|当前日志文件列表($LOG_FILE_LIST)不存在或者为空,检测失败,程序退出."
exit 0
else
WC_LOG_FILE_LIST=`cat $LOG_FILE_LIST|awk '{print $2}'|egrep -o $1|wc -l`
if [ $WC_LOG_FILE_LIST -eq 0 ];then
echo "$(date)|请传递指定列表`cat $LOG_FILE_LIST|awk '{print $2}'|xargs`的日志服务名称."
exit 0
fi
fi
else
echo "$(date)|这里只接受传递一级参数服务名称,请确认后重新传."
exit 0
fi
while 1>0;do
if [ ! -e $BASEDIR/global_profile ]||[ ! -s $BASEDIR/global_profile ];then
echo "$(date)|当前变量文件($BASEDIR/global_profile)不存在或者为空,程序异常退出."
break
else
source $BASEDIR/global_profile
TIME=$(date +%Y-%m-%d)
TIME1=$(date +%Y%m%d)
LOG_DIR=$BASEDIR/logs
MAKE_LOG_FILE=log.$1.$TIME
if [ ! -e $LOG_DIR ];then
mkdir -p $LOG_DIR
fi
if [ -e $LOG_FILE_LIST ];then
if [ -s $LOG_FILE_LIST ];then
SLEEP_TIME=`grep "$1" $LOG_FILE_LIST|awk '{print $3}'|grep -v "^#"|grep -v "^$"`
GREP_CONTENTS=`grep "$1" $LOG_FILE_LIST|awk '{print $4}'|grep -v "^#"|grep -v "^$"`
OPEN_CLOSE_SEND_MAIL=`grep "$1" $LOG_FILE_LIST|awk '{print $5}'|grep -v "^#"|grep -v "^$"`
OPEN_CLOSE_LOGS_DAY=`grep "$1" $LOG_FILE_LIST|awk '{print $6}'|grep -v "^#"|grep -v "^$"`
if [ $OPEN_CLOSE_LOGS_DAY -eq 0 ];then
CHECK_LOG_FILE=`grep "$1" $LOG_FILE_LIST|awk '{print $1}'|grep -v "^#"|grep -v "^$"`
elif [ $OPEN_CLOSE_LOGS_DAY -eq 1 ];then
TEMP_CHECK_LOG_FILE=`grep "$1" $LOG_FILE_LIST|awk '{print $1}'|grep -v "^#"|grep -v "^$"`
#以下是匹配所有日志格式的语句
if [ -e ${TEMP_CHECK_LOG_FILE}.${TIME} ];then
CHECK_LOG_FILE=${TEMP_CHECK_LOG_FILE}.${TIME}
elif [ -e ${TEMP_CHECK_LOG_FILE}-${TIME} ];then
CHECK_LOG_FILE=${TEMP_CHECK_LOG_FILE}-${TIME}
elif [ -e ${TEMP_CHECK_LOG_FILE}_${TIME} ];then
CHECK_LOG_FILE=${TEMP_CHECK_LOG_FILE}_${TIME}
elif [ -e ${TEMP_CHECK_LOG_FILE}.${TIME}.log ];then
CHECK_LOG_FILE=${TEMP_CHECK_LOG_FILE}.${TIME}.log
elif [ -e ${TEMP_CHECK_LOG_FILE}-${TIME}.log ];then
CHECK_LOG_FILE=${TEMP_CHECK_LOG_FILE}-${TIME}.log
elif [ -e ${TEMP_CHECK_LOG_FILE}_${TIME}.log ];then
CHECK_LOG_FILE=${TEMP_CHECK_LOG_FILE}_${TIME}.log
elif [ -e ${TEMP_CHECK_LOG_FILE}.${TIME1} ];then
CHECK_LOG_FILE=${TEMP_CHECK_LOG_FILE}.${TIME1}
elif [ -e ${TEMP_CHECK_LOG_FILE}-${TIME1} ];then
CHECK_LOG_FILE=${TEMP_CHECK_LOG_FILE}-${TIME1}
elif [ -e ${TEMP_CHECK_LOG_FILE}_${TIME1} ];then
CHECK_LOG_FILE=${TEMP_CHECK_LOG_FILE}_${TIME1}
elif [ -e ${TEMP_CHECK_LOG_FILE}.${TIME1}.log ];then
CHECK_LOG_FILE=${TEMP_CHECK_LOG_FILE}.${TIME1}.log
elif [ -e ${TEMP_CHECK_LOG_FILE}-${TIME1}.log ];then
CHECK_LOG_FILE=${TEMP_CHECK_LOG_FILE}-${TIME1}.log
elif [ -e ${TEMP_CHECK_LOG_FILE}_${TIME1}.log ];then
CHECK_LOG_FILE=${TEMP_CHECK_LOG_FILE}_${TIME1}.log
else
echo "$(date)|未知的日志格式."|tee -a $LOG_DIR/$MAKE_LOG_FILE
fi
else
echo "$(date)|当前传递参数错误,请传递0或者1(0表示使用当前日志查找或者1自动添加当前日期查找)"|tee -a $LOG_DIR/$MAKE_LOG_FILE
fi
WC_COUNT_LOG_START=`wc -l $CHECK_LOG_FILE|awk '{print $1}'`
sleep $SLEEP_TIME
WC_COUNT_LOG_START1=`wc -l $CHECK_LOG_FILE|awk '{print $1}'`
WC_UPDATE_LOG_FILE=`expr $WC_COUNT_LOG_START1 - $WC_COUNT_LOG_START`
if [ $WC_UPDATE_LOG_FILE -eq 0 ];then
echo "$(date)|当前检测日志($CHECK_LOG_FILE)没有日志更新." >>$LOG_DIR/$MAKE_LOG_FILE
else
WC_GREP_COUNTS=`tail -"$WC_UPDATE_LOG_FILE" "$CHECK_LOG_FILE"|grep "$GREP_CONTENTS"|wc -l`
if [ $WC_GREP_COUNTS -eq 0 ];then
echo "$(date)|当前更新的日志($CHECK_LOG_FILE)没有发现指定查找内容($GREP_CONTENTS)." >>$LOG_DIR/$MAKE_LOG_FILE
else
if [ $OPEN_CLOSE_SEND_MAIL -eq 1 ];then
if [ -e $MAILX_CONTACTS_LIST ];then
if [ -s $MAILX_CONTACTS_LIST ];then
echo "当前日志($CHECK_LOG_FILE)检测到指定查找内容($GREP_CONTENTS)."|$MAILX_BIN -s "$MAILX_TITLE" `cat $MAILX_CONTACTS_LIST|grep -v "^#"|grep -v "^$"|xargs`
echo "$(date)|当前日志($CHECK_LOG_FILE)检测到指定查找内容($GREP_CONTENTS),已触发邮件通知`cat $MAILX_CONTACTS_LIST|grep -v "^#"|grep -v "^$"|xargs`."
else
echo "$(date)|当前日志($CHECK_LOG_FILE)检测到指定查找内容($GREP_CONTENTS),邮件联系人列表文件($MAILX_CONTACTS_LIST)为空,触发邮件失败." >>$LOG_DIR/$MAKE_LOG_FILE
fi
else
echo "$(date)|当前日志($CHECK_LOG_FILE)检测到指定查找内容($GREP_CONTENTS),联系人列表文件($MAILX_CONTACTS_LIST)不存在,触发邮件失败." >>$LOG_DIR/$MAKE_LOG_FILE
fi
else
echo "$(date)|当前日志($CHECK_LOG_FILE)检测到指定查找内容($GREP_CONTENTS),当前设置为禁止发送邮件." >>$LOG_DIR/$MAKE_LOG_FILE
fi
fi
fi
else
echo "$(date)|当前日志文件列表($LOG_FILE_LIST)为空,程序退出执行." >>$LOG_DIR/$MAKE_LOG_FILE
break
fi
else
echo "$(date)|当前日志文件列表($LOG_FILE_LIST)不存在,程序退出执行." >>$LOG_DIR/$MAKE_LOG_FILE
break
fi
fi
done
|