![如果 grep 结果为空,则使用脚本发送电子邮件](https://linux22.com/image/657846/%E5%A6%82%E6%9E%9C%20grep%20%E7%BB%93%E6%9E%9C%E4%B8%BA%E7%A9%BA%EF%BC%8C%E5%88%99%E4%BD%BF%E7%94%A8%E8%84%9A%E6%9C%AC%E5%8F%91%E9%80%81%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6.png)
时间已经过去很久了,我似乎记不清该怎么做了。我试图在日志文件中 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 分钟内容(至少是自上次运行脚本以来写入的文件内容),那么你需要类似logtail
(http://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。