我编写了一个脚本,仅在过去半小时内轮询日志文件条目并发送电子邮件,如果发现错误。我已安排此脚本每半小时在crontab中运行。
以下是脚本。但是这个脚本没有按照我的意愿工作。如果它在上午11:30运行,它应该扫描日志,持续时间为上午11:00:00到11:30:00。相反,它也在扫描文件“00:00”或“30:00”。我想,我在应用正则表达式时犯了一些错误,有人可以帮忙吗?
blogs=/opt/docs/datapower/prod/business.log
slogs=/opt/docs/datapower/prod/system.log
starttime=$(date +'%H')
currmin=$(date +'%M')
curdate=`date|cut -d' ' -f5`
echo $(date)
if [ $currmin -le 29 ] && [ $starttime -ne 00 ] ; then
starttime1=`echo "$(date +'%H') - 1" | bc`
logtime="$starttime1"
logtime="$logtime:[3-5][0-9]"
echo $logtime
elif [ $currmin -le 29 ] && [ $starttime -eq 00 ] ; then
logtime="23:[3-5][0-9]"
echo $logtime
else
logtime="$starttime"
logtime="$logtime:[0-2][0-9]"
echo $logtime
fi
if ( grep "$logtime" $slogs | egrep "AAA Authentication Failure|AAA Authorization Failure") > dptest 2>&1;then
Do something
fi
以下是示例日志条目
Nov 20 06:06:58 business-log-sta [DP-Domain-STAGING][0x80000001][business-log][info] mpgw(GenServiceMPG): trans(31513092)[request]: AAA Authentication failure/>
答案 0 :(得分:0)
您的代码在我的系统上运行,我遇到的唯一问题是“AAA身份验证失败”在代码中写有大写“F”,在日志文件中写有小写“f”。
您也可以通过更改
等行来减少代码logtime="$starttime1"
logtime="$logtime:[3-5][0-9]"
到logtime="$starttime1:[3-5][0-9]"
。
编辑:如果您愿意,我可以提供在我的系统上运行的脚本的示例输出。