概述
#!/bin/bash
declare -A dict
dict=([key1]=0)
#第一步定义字典类型变量
#给key1动态赋值,后面可以直接取key1
# 指定log日志所在文件夹
curr_dir=/root/shells/
# 指定log日志的绝对路径
file_path=${curr_dir}/test.log
# 获取今天的时间,时间格式为yyyy-mm-dd
today=`date +%F`
# 获取7天前的时间
#today=`date -d -7day +%F`
# 过滤出今天的数据,写入到日期文件里
#today_log=`sed -n '/${today} 00:00:00*/,/${today} 23:59:59*/p' ${file_path} > ${curr_dir}/${today}.log`
#echo ${today_log}
# 过滤出今天的数据,写入到日期文件里
sl=`grep -n "${today}" ${file_path} | head -1 | awk -F ":" '{print $1}'`
el=`cat ${file_path} | wc -l`
today_log=`sed -n ''${sl}','${el}' p' ${file_path} > ${curr_dir}/${today}.log`
#sed -n截取两个行号之间的内容,写入新的文件
# 过滤出今天2:00以前的数据
#prev_2=`sed -n '/${today} 00:00:00*/,/${today} 01:59:59*/p' ${file_path} > ${curr_dir}/prev_2.log`
prev_2=`cat ${curr_dir}/${today}.log | awk '$2<="01:59:59.999"' > ${curr_dir}/prev_2.log`
echo ${prev_2}
#------------------------------------------------------
# 判断未出现SP_INSERT.sql
sp_insert=`cat ${curr_dir}/prev_2.log | grep -w 'SP_INSERT.sql runDate = ${today}' | wc -l`
# 如果sp_insert = 0, 则shell脚本报错,001文件未送达
if [ ${sp_insert} -eq 0 ]; then
echo "001文件未送达"
exit 1;
fi
#grep -w用于字符串精确匹配
#wc -l 读取文件的行数
#-----------------------------------------------------------------
## 匹配timeout的数量
#timeout=`cat | grep -w 'timeout' | wc -l`
## 当timeout>=2时,shell脚本报错
#if [ ${timeout} -ge 2 ]; then
# echo "timeout数量大于等于2"
# exit 1;
#fi
# 匹配timeout的内容
#timeout=`egrep -B 1 '.*timeout.*' ${curr_dir}/${today}.log | cut -d"-" -f5 | cut -d" " -f2`
timeout=`egrep -B 1 "timeout" ${curr_dir}/${today}.log | cut -d " " -f 8`
for i in `echo ${timeout}`
do
if [[ $i =~ ".sql" ]]; then
if [ -z ${dict[${i}]} ];then
#if [ ! -n ${dict[key1]} ];then
dict[${i}]=1
else
((dict[${i}]++))
fi
fi
done
#egrep -B 1 取出相匹配的关键字的一行以及上一行内容
#for i in 1 2 3 4 5 do echo $i done 输出i遍历in里面的内容,该处是遍历${timeout}
#使用[[ … ]]条件判断结构,能够防止脚本中的许多逻辑错误
#if [ -z str1 ] 当串的长度为0时为真(空串)
#
#
# 当timeout>=2时,shell脚本报错
for k in ${dict[*]}
do
if [ ${k} -ge 2 ]; then
echo "timeout数量大于等于2"
exit 1;
fi
done
# 同一sql脚本运行4次未成功
error=`egrep -n 'ERROR - (.*)' ${curr_dir}/${today}.log | cut -d " " -f 5 | awk '{a[$1]+=1}END{for (i in a)print a[i]}'`
# 只要有一个超过4,则抛出异常
for i in `echo ${error}`
do
if [ ${i} -ge 4 ]; then
echo "相同sql错误超过4次"
exit 1;
fi
done
最后
以上就是阳光春天为你收集整理的监控日志文件shell脚本,截取某段时间的全部内容,希望文章能够帮你解决监控日志文件shell脚本,截取某段时间所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复