我正在开发脚本,该脚本将 grep 最近一小时的日志并检查任何异常并向Solaris 平台发送电子邮件。
我做了以下步骤
grep -n -h date +'%Y-%m-%d %H:%M' test.logs
上面的命令给了我行号,然后我执行以下操作
tail +6183313 test.log | grep 'exception'
样本日志
2014-02-17 10:15:02,625 | WARN | m://mEndpoint | oSccMod | 262 - com.sm.sp-client - 0.0.0.R2D03-SNAPSHOT | 1201 or 101 is returned as exception code from SP, but it is ignored
2014-02-17 10:15:02,625 | WARN | m://mEndpoint | oSccMod | 262 - com.sm.sp-client - 0.0.0.R2D03-SNAPSHOT | SP error ignored and mock success returned
2014-02-17 10:15:02,626 | INFO | 354466740-102951 | ServiceFulfill | 183 - org.apache.cxf | Outbound Message
请建议任何更好的替代方案来执行上述任务。
与 GNUdate
,可以使用:
grep "^$(date -d -1hour +'%Y-%m-%d %H')" test.logs | grep 'exception'| mail -s "exceptions in last hour of test.logs" ImranRazaKhan
上面的第一步是选择过去一小时的所有日志条目。这是用完成的grep
通过查找与一小时前匹配的年月日和小时开头的所有行:
grep "^$(date -d -1hour +'%Y-%m-%d %H')" test.logs
管道中的下一步是从这些行中选择有异常的行:
grep 'exception'
管道的最后一步是发送邮件:
mail -s "exceptions in last hour of test.logs" ImranRazaKhan
上述内容将邮件发送到 ImranRazaKhan(或您选择的任何电子邮件地址),主题行为“test.logs 最后一小时的异常”。
拥有的便利-d
选项date
不应被低估。从当前小时中减去 1 似乎很简单,但是,如果当前小时是中午 12 点,那么我们需要调整日期和小时。如果该时间是该月第一天的中午 12 点,我们还必须更改月份。今年也是如此。当然,闰年期间的二月需要特别考虑。
将以上内容调整到 Solaris:
考虑三种情况:
-
在 Solaris 11 或更高版本下,GNUdate
实用程序可在/usr/gnu/bin/date
。因此,我们只需要指定一个路径date
:
grep "^$(/usr/gnu/bin/date -d -1hour +'%Y-%m-%d %H')" test.logs | grep 'exception'| mail -s "exceptions in last hour of test.logs" ImranRazaKhan
在 Solaris 10 或更早版本下,可以下载并安装 GNU date
-
如果 GNU 日期仍然不可用,我们需要找到另一种方法来查找一小时前的日期和时间。最简单的解决方法可能是选择比您所在时区晚一小时的时区。如果该时区是香港,则使用:
grep "^$(TZ=HongKong date +'%Y-%m-%d %H')" test.logs | grep 'exception'| mail -s "exceptions in last hour of test.logs" ImranRazaKhan
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)