我正在寻找一个单行命令来从 Postfix 邮件日志文件中提取过去一小时内发生的日志条目。
基于这个问题,我尝试操作建议的命令,但它相当冗长。我希望缩短/改进这一点。我当前正在使用的命令是:
awk -vDate1=`date -d'now-1 hour' +%H:%M:%S` -vDate2=`date -d'now-1 hour' +%d` '{ if ($3 > Date1 && $2 >= Date2) print $0}' /var/log/maillog
邮件日志的日志格式如下:
Jan 18 05:55:44 smtp-out-01 postfix/smtpd[8748]: connect from server.com[1.2.3.4]
Jan 18 05:55:44 smtp-out-01 postfix/smtpd[8748]: 70CF214B4: client=server.com[1.2.3.4]
Jan 18 05:55:44 smtp-out-01 postfix/cleanup[8751]: 70CF214B4: message-id=<[email protected]>
Jan 18 05:55:44 smtp-out-01 postfix/qmgr[28134]: 70CF214B4: from=<[email protected]>, size=1806, nrcpt=1 (queue active)
提取过去一小时的条目的最短且最有效的方法是什么?
答案1
journalctl -u postfix -S "$(date -d "-1 hour" +%Y"-"%m"-"%d" "%T)
使用 -u 指定服务名称,然后使用 -S 指定从 date 命令生成的“since”日期
答案2
awk -v ldate="$( date +'%d %H-%M-%S' -d'1 hour ago' )" '$2 " " $3 >= ldate'
我认为可以做你想做的事,但正如 RomanPerekrest 所说,它在本月的第一个小时不起作用。
无论如何,这将变量设置date
为日期,然后是时间,然后比较字段 2 - 3 的范围,看看它们是否高于/晚于它。只需添加所需的间距即可将它们连接起来,因此只需要一个日期字符串。
可能值得将日期更改为更好的格式,并将记录器设置为记录更方便的格式(也包括年份)。
答案3
不幸的是,前面的句子都不适合我。
(Linux 4.4.0-142-generic #168-Ubuntu)
我的变体( bash ):
k=$(date -d '1 hour ago' +'%H') | egrep "^*$k:" ./my.log
答案4
i=`date -d "1 hour ago"| awk '{print $2}'`; j=`date -d "1 hour ago"| awk '{print $3}'`;k=`date -d "1 hour ago"| awk '{print $4}'`; awk -v i="$i" -v j="$j" -v k="$k" '$1 == i && $2 == j && $3 > k {print $0}' /var/log/maillog
在变量 i==> 中存储月份 在变量 j==> 中存储日期
在变量 k==> 中以小时:分钟:秒的格式存储持续时间
我的脚本将检查当前月份、日期并检查过去 1 小时至今存在的日志。
如有任何困惑请告诉我