对Bash完全无能为力,但试图学会完成这项任务。
我需要一个可以拖尾日志文件的最后50行的脚本,查找字符串" ERROR",如果该条件为真,则发送电子邮件。
我可以手动做一些零碎的东西,但是我无法构建完全可以粘在cron中的东西。 Sendmail独立工作。
tail -n 50 /var/log/unifi-video/recording.log | grep ERROR
至少可以输出。理想情况下,只有在过去50行中找到ERROR时我才会收到电子邮件,否则无需采取任何措施。如果有人可以协助使用if / else语句来实现这一点,那将非常感激。
答案 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
选项会抑制任何输出,因为您不关心实际匹配的行,只是找到了匹配项。)