早上被同事叫起来处理点事情,然后打开电脑,看了下cu,看到了个帖子,就想了一下,内容与解决方法。帖子地址:
问题:
- shell中,每分钟跟踪一次日志,查找日志中的"ERROR“ 关键字
- 比如现在查找是一个,下次就从这一个往下查找,而不是又从头开始,每次查找后,我要计数,计数达到一定的阀值后,会触发一个动作,比如:发邮件通知,短信通知什么的。
解决方案:
- 因为我觉得error日志不会是一直、持续不段生成的,有两种方法:
- 方法一:每发现一次error,都备份一次文件,也就是:cat stderr.log >>error.log,cat /dev/null >stderr.log,每次先读stderr.log,发现error,执行上面的步骤,然后再发邮件、短信。
- 方法二:shell里面定义一个变量,如:先,awk '/ERROR/&&NR>‘“${linenumber}”’' /XXX/stderr.log ,然后linenumber=`wc -l /XXX/stderr.log`;但是在第一次的时候,需要特殊处理一下。这种方式不一定行,因为变量的存活时间这个概念我不清楚,但是可以用这种方法:linenumer=`cat /XXX/hangshu.dat |awk '{print $1}'`;awk '/ERROR/&&NR>‘“${linenumber}”’' /XXX/stderr.log;wc -l /XXX/stderr.log >/XXX/temp.dat mail -s "find error" XXX@qq.com
- #!/bin/bash
- #linenumber为上次error文件总行数
- linenumber=`awk '{print $1}' /yk/shell/temp.dat`
- echo "${linenumber}"
- #在次我搜索为com
- errornum=`awk '/com/&&NR>'"${linenumber}"'' /yk/shell/testfile |wc -l `
- if [ ${errornum} -gt 10 ];then
- ttime=`date +%F`
- echo "${ttime} find some errors!" >/yk/shell/mailcontent
- mail -s "${ttime} errors" xichubawangaini@163.com 282#078@qq.com
- fi
- wc -l /yk/shell/testfile >/yk/shell/temp.dat
以均个人见解,如有更好的方法,大家可以交流交流。