1. 需求,获取时段内的/var/log/messages文件内出现错误的消息,支持多行的消息,支持天,小时分钟,秒级的区间,可以修改监控的日志对象
  1. #!/bin/bash
  2.  
  3. if [ $# != 1 ] ; then
  4. echo "USAGE: $0 num[Y|D|H|M|S]"
  5. echo " e.g.: $0 12h"
  6. exit 1;
  7. fi
  8.  
  9. interval=$1
  10. unit=$(echo $interval | tr -d [:blank:] |tr -d [:digit:] |tr -t [a-z] [A-Z])
  11. val=$(echo $interval | tr -d [:blank:] |tr -d [:alpha:] )
  12. #echo $val
  13. #echo $unit
  14.  
  15. case $unit in
  16. Y) unit="years"
  17. ;;
  18. D)
  19. unit="days"
  20. ;;
  21. H)
  22. unit="hours"
  23. ;;
  24. M)
  25. unit="minutes"
  26. ;;
  27. S)
  28. unit="seconds"
  29. ;;
  30. *)
  31. echo "not"
  32. exit 1;
  33. ;;
  34. esac
  35. #echo $unit
  36.  
  37. ts=$(date -d"-${val}${unit}" +"%s")
  38. echo $ts
  39. #date span one year 计算两年之间的秒数
  40. cts=$(date +"%s")
  41. x1=$(date -d"$(date +%Y)-01-01 00:00:00" +"%s")
  42. x2=$(date -d"$(date -d'-1years' +%Y)-01-01 00:00:00" +"%s")
  43. ((secs=$x1-$x2))
  44.  
  45. checkfile=/var/log/messages
  46. #checkfile=/home/student/test.txt
  47.  
  48. #first_line=$(awk -v ts="$ts" '{"date -d \""$1" "$2" "$3"\" +%s 2>/dev/null"|getline dt; if(dt>ts) {print $0; exit;}}' $checkfile)
  49. first_line=$(awk -v secs="$secs" -v ts="$ts" -v cts="$cts" '{"date -d \""$1" "$2" "$3"\" +%s 2>/dev/null"|getline dt;if(dt>cts){dt=dt-secs;}if(dt>ts) {print $0; exit;}}' $checkfile)
  50.  
  51. echo "firstline is $first_line"
  52.  
  53. if [ "$first_line"X == "X" ]; then exit 1; fi
  54.  
  55. basedir=$(cd `dirname $0`;pwd)
  56. #echo "basedir is $basedir"
  57.  
  58. log=$basedir/linux_messages.log
  59. >$log
  60.  
  61. #function to handle one msg
  62. handleOneMsg()
  63. {
  64. msg="$1"
  65. has_error=$(echo "$msg"|grep -oie "\berror\b")
  66. if [ "$has_error"X != "X" ]; then
  67. #first we should encode the < > &
  68. msg_out=$(echo "$msg" |sed 's/&/&/g'| sed 's/</\</g'|sed 's/>/\>/g' )
  69. cat <<EOF >>$log
  70. <msg>
  71. <hostName>`hostname`</hostName>
  72. <product>LINUX</product>
  73. <date>`date +"%Y-%m-%d %T"`</date>
  74. <streamName>messages</streamName>
  75. <output>$msg_out</output>
  76. </msg>
  77. EOF
  78. fi
  79.  
  80. }
  81.  
  82. OLDIFS=IFS
  83. IFS=$'\n'
  84. for line in $(grep -A100000 -F "$first_line" $checkfile)
  85. do
  86. #date ..... one message is start with date
  87. #before another msg is the last msg's body
  88. line_begin=$(echo $line | awk '{print $1,$2,$3}')
  89. #echo "line begin is $line_begin"
  90.  
  91. line_begin_ts=$(date -d "$line_begin" "+%s" 2>/dev/null)
  92. #echo "line begin ts is $line_begin_ts"
  93.  
  94. if [ "${line_begin_ts}"X == "X" -o "$msg"X == "X" ] ; then
  95. msg="${msg}"$'\n'"${line}"
  96. continue;#consume next line
  97. fi
  98.  
  99. handleOneMsg "$msg"
  100. msg=$line
  101. done
  102.  
  103. handleOneMsg "$msg"
  104.  
  105. IFS=$OLDIFS

bash 获取时间段内的日志内容的更多相关文章

  1. Shell 从日志文件中选择时间段内的日志输出到另一个文件

    Shell 从日志文件中选择时间段内的日志输出到另一个文件 情况是这样的,某系统的日志全部写在一个日志文件内,所以这个文件非常大,非常长,每次查阅的时候非常的不方便.所以,相关人员希望能够查询某个时间 ...

  2. 利用webBrowser获取框架内Html页面内容

    原文:利用webBrowser获取框架内Html页面内容 利用webBrowser获取页面比较简单,MSDN下有示例,在这里不必多说. 可是一些 HTML 文档由“框架”构成,或可以存放它们自己独特 ...

  3. SQL 获取时间段内日期列表

    declare @start date,@end date; set @start='2010-01-01'; set @end='2010-02-01'; --获取时间段内日期列表 select [ ...

  4. SVN windows内修改日志内容(错误解决)

    在我的电脑是windows 7,使用TortoiseSVN客户端,选中代码目录,点击右键,选择<显示日志> 显示日志信息 修改原来的日志信息(在需要修改的版本的日志中点击鼠标右键,显示如下 ...

  5. 根据时间段获取时间段内所有时间点(js)

    Date.prototype.format=function (){var s='';s+=this.getFullYear()+'-';// 获取年份.s+=(this.getMonth()+1)+ ...

  6. SQL获取时间段内的所有月份

    select convert(varchar(7),dateadd(month,number,'2010-01-01'),120) AS MONTHfrom master..spt_valueswhe ...

  7. sql获取时间段内的所有日期

    ,'2015-01-01 00:00:00') h INTO vinson_h DELETE vinson_h DECLARE @h int SELECT @h=DATEDIFF(HOUR,'2015 ...

  8. java获取时间段内的所有日期

        public static void main(String[] args) {        SimpleDateFormat dateFormat = new SimpleDateForm ...

  9. JAVA 获取时间段内的每一天

    public class day { public static void main(String[] args) { // TODO Auto-generated method stub Strin ...

随机推荐

  1. Mac 安装Jupyter notebook

    python:mac下自带Python 2.7.10 1.先升级了pip安装工具:sudo python -m pip install --upgrade --force pip 2.安装setupt ...

  2. iOS开发之 -- 帧动画的使用

    在项目的开发过程中,我们经常会遇到使用动画的时候,比如我们在请求接口直接开始一个动画,请求结束后结束动画,下面我就给大家展示一个很方便的帧动画的用法: 代码如下: .h #import <Fou ...

  3. [UIImage _isCached]: message sent to deallocated instance

    本文转载至 http://zhuhaibobb.blog.163.com/blog/static/2744006720124191633375/       这几天做了个APP打开20份钟左右就强制退 ...

  4. 微软笔试题-highways

    题目大意 一条单向的高速公路上有N辆车,在0时刻,每辆车分别在起点A[0],A[1]....处开始从北向南出发,每辆车有个终点B[0],B[1]....且每辆车有个限制速度 V[0],V[1]... ...

  5. 【BZOJ2827】千山鸟飞绝 hash+堆+SBT

    [BZOJ2827]千山鸟飞绝 Description 话说有一天doyouloveme和vfleaking到山里玩.谁知doyouloveme刚刚进山,所有的鸟儿竟被他的神犇气场给惊得全部飞走了.v ...

  6. MD5加密算法全解析

    转自:http://blog.csdn.net/nzfxx/article/details/51804193 大家好,我们现在来讲解关于加密方面的知识,说到加密我认为不得不提MD5,因为这是一种特殊的 ...

  7. java nio探险

    区别于io: nio是基于通道和缓冲区的,io是基于字节流和字符流的,(千万别被这些破名词唬住).以读取文件为例,文件就是自来水厂,通道就是自来水管道,缓冲区就是你家的缸(或者盛水的xx容器,例如你的 ...

  8. angularJs-脏检查

    来自:http://www.cnblogs.com/liuyanan/p/4935652.html scope是一个指向应用model的object,也是表达式的执行上下文. scope被放置在一个类 ...

  9. Servlet------>mvc模式原理图

    常用开发模式: 客户在客户端 访问,发送请求到servlet servlet调用service接口 service实现类调用dao接口 dao接口通过jdbc技术操作数据库,并存储到javabean, ...

  10. 【Python数据挖掘】决策树、随机森林、Bootsing、

    决策树的定义 决策树(decision tree)是一个树结构(可以是二叉树或非二叉树).其每个非叶节点表示一个特征属性上的测试,每个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个类别. ...