【发布时间】:2015-01-18 04:23:10
【问题描述】:
我必须编写一个 shell/perl 脚本来扫描一个日志文件以获取最后 30 分钟的数据。要求是在 Cron 中安排此脚本每 30 分钟运行一次并查找错误字符串。
OS: Solaris
Shell:Bash
我试过下面的脚本,但它变得太长而且笨拙,我们有其他方法可以让它更短吗?
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/>
【问题讨论】:
-
你能举个例子吗?
-
问题中添加了示例日志行。
-
只是一个疯狂的猜测,带有 perl
5.8.x的 Solaris 所以没有安装Time::Piece模块。 -
在 Solaris 中测试
date命令。如果它像 Linuxdate这样通用,您可以减少 IF-THEN-ELSE 块并使其更容易。
标签: bash perl shell solaris perlscript