【发布时间】:2016-08-25 12:38:22
【问题描述】:
我有一个文本日志文件,格式如下
Thread-28689296: Thu Aug 25 15:18:41 2016 [ info ]: xxxxx xxxxxx xxxxx
所以我想在最近几分钟内运行 cron 作业以查找某些错误消息。我写了以下命令
awk -vDate=`date +%b %d %H:%M:%S %Y` -vDate2=`date --date="2 minutes ago" +%b %d %H:%M:%S %Y` '$5 > Date && $5 < Date2' /var/log/dummy.log | grep "Fatal"
在上面的命令中,我用字符串Fatal 搜索在时间现在和 2 分钟前有时间戳的消息。
但我收到以下错误
date: extra operand %d'
Try date --help' for more information.
date: extra operand %d'
Try date --help' for more information.
如果我运行日期命令,我会得到如下结果
date "+%b %d %H:%M:%S %Y"
Aug 25 15:25:01 2016
date --date="2 minutes ago" +"%b %d %H:%M:%S %Y"
Aug 25 15:31:42 2016
所以我的 awk 脚本中的日期命令应该没问题。
我还想将发现的 2 分钟内发生的错误消息重定向到一个文件以作为警报邮件发送,但我还没有做到这一点。
请告诉我我的 awk 脚本有什么问题。提前非常感谢!
【问题讨论】:
-
你到底为什么要用 cron 把它复杂化?这是一个想法;使用 cron 提取自上次运行 cron 以来的所有日志条目,然后将这些条目放入单个文件中。称之为“日志副本”!说真的,如果您想要在日志条目后两分钟内收到电子邮件警报,请不要使用 cron。相反,让日志通过一个守护进程(例如 syslog-ng)路由,该守护进程生成日志条目并向您发送电子邮件警报。
-
日志不在标准 syslog 中,所以我不能使用 syslog-ng。