时间已经过去很久了,我似乎记不清该怎么做了。我试图在日志文件中 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。