如果 grep 结果为空,则使用脚本发送电子邮件

如果 grep 结果为空,则使用脚本发送电子邮件

时间已经过去很久了,我似乎记不清该怎么做了。我试图在日志文件中 grep 一个或多个单词,如果在过去十五分钟内不存在,则发送电子邮件(除非有更好的方法,否则我将每十五分钟设置一次 cron 作业)我目前所做的是

if grep --quiet 'SEND OK' /logfile; then
  echo exists
else
  echo not found | mail -s "houston we have a problem" [email protected]
fi

我可以使用 tail 检查过去 15 分钟的日志文件吗?|tail -15 有用吗?

我可以给它一个“if”吗?如果它在过去 15 分钟内没有找到关键字,它会给我发电子邮件,因为它每 15 分钟运行一次

我将非常感激任何帮助

答案1

如果你尝试查看文件的最后 N 分钟内容(至少是自上次运行脚本以来写入的文件内容),那么你需要类似logtailhttp://linux.die.net/man/8/logtail)。这可能已在您的发行版中可用。tail单独使用它不会有帮助,因为它只会为您提供最后 N 行/字符,无论它们是何时写的。

答案2

如果您的日志中有日期和时间信息(我认为是这样),您可以将另一个 grep 添加到您的 grep 中以过滤日期并使用 -A {{ big_number }} 获取从 15 分钟前到现在的所有行。

类似于:

grep "$(date -d "15 minutes ago" +"{{your_log_date_format}}")" -A {{ big_number }} /logfile | grep --quiet 'SEND OK'

这是肮脏的方法(如果您的 {{ big_number }} 比过去 15 分钟内写入日志的行数最小,则可能会出现问题)。

致谢:http://geek.co.il/2010/04/08/script-day-output-the-tail-of-a-log-based-on-time

相关内容