Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1647059
  • 博文数量: 409
  • 博客积分: 6240
  • 博客等级: 准将
  • 技术积分: 4908
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-01 00:04
文章分类

全部博文(409)

文章存档

2021年(1)

2019年(1)

2017年(1)

2016年(13)

2015年(22)

2013年(4)

2012年(240)

2011年(127)

分类: LINUX

2012-04-07 11:15:55

   早上被同事叫起来处理点事情,然后打开电脑,看了下cu,看到了个帖子,就想了一下,内容与解决方法。帖子地址:

问题:

  1. shell中,每分钟跟踪一次日志,查找日志中的"ERROR“ 关键字
  2. 比如现在查找是一个,下次就从这一个往下查找,而不是又从头开始,每次查找后,我要计数,计数达到一定的阀值后,会触发一个动作,比如:发邮件通知,短信通知什么的。

解决方案:

  1. 因为我觉得error日志不会是一直、持续不段生成的,有两种方法:
  2. 方法一:每发现一次error,都备份一次文件,也就是:cat stderr.log >>error.log,cat /dev/null >stderr.log,每次先读stderr.log,发现error,执行上面的步骤,然后再发邮件、短信。

  3. 方法二: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
实际可行脚本,已经过测试:

  1. #!/bin/bash
  2. #linenumber为上次error文件总行数
  3. linenumber=`awk '{print $1}' /yk/shell/temp.dat`
  4. echo "${linenumber}"
  5. #在次我搜索为com
  6. errornum=`awk '/com/&&NR>'"${linenumber}"'' /yk/shell/testfile |wc -l `
  7. if [ ${errornum} -gt 10 ];then
  8. ttime=`date +%F`
  9. echo "${ttime} find some errors!" >/yk/shell/mailcontent
  10. mail -s "${ttime} errors" xichubawangaini@163.com 282#078@qq.com
  11. fi
  12. wc -l /yk/shell/testfile >/yk/shell/temp.dat

以均个人见解,如有更好的方法,大家可以交流交流。
阅读(4284) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~