BASH尾部日志文件并在匹配条件下发送邮件

时间:2015-10-14 19:48:27

标签: bash email

对Bash完全无能为力,但试图学会完成这项任务。

我需要一个可以拖尾日志文件的最后50行的脚本,查找字符串" ERROR",如果该条件为真,则发送电子邮件。

我可以手动做一些零碎的东西,但是我无法构建完全可以粘在cron中的东西。 Sendmail独立工作。

tail -n 50 /var/log/unifi-video/recording.log | grep ERROR

至少可以输出。理想情况下,只有在过去50行中找到ERROR时我才会收到电子邮件,否则无需采取任何措施。如果有人可以协助使用if / else语句来实现这一点,那将非常感激。

2 个答案:

答案 0 :(得分:1)

如果您希望在单行中执行此操作,可以使用以下内容:

[ $(tail -n 50 /var/log/unifi-video/recording.log | grep ERROR | wc -l) -gt 0 ] && yourmailcommand

这只是将grep的输出传递给wc -l,它返回从grep返回的行数。如果该计数大于0,则它将在双和号之后执行该位。如果您希望在未找到else行的情况下添加ERROR,则可以:

[ $(tail -n 50 /var/log/unifi-video/recording.log | grep ERROR | wc -l) -gt 0 ] && yourmailcommand || dosomethingelseinstead

答案 1 :(得分:0)

grep如果找到匹配则退出状态为0,否则退出1,所以类似

 tail -n 50 /var/log/unifi-video/recording.log | grep -q ERROR && <sendmail command here>

会做你想要的。 (-q选项会抑制任何输出,因为您不关心实际匹配的行,只是找到了匹配项。)