观看文件并在更改时发送电子邮件

bsd*_*ish 2 email watch

我有一个日志文件,偶尔会出现严重错误。每次发生严重错误时,我都希望向自己发送一封电子邮件,通知我所做的更改。是否有我可以为此目的调整的 unix 工具/一组 unix 工具?

我想做的是

tail -f logfile | grep CRITICAL > critical.errors
watch tail critical.errors   # And somehow, email on changes. 
Run Code Online (Sandbox Code Playgroud)

但是, watch 命令不会执行任何操作。所以......有没有像'watch'这样的东西。或者也许是一个很好的现有脚本可以做到这一点?我可以自制一个 bash/python 解决方案,但我宁愿重用现有工具来进行更清晰的错误处理等。

Edu*_*nec 5

试试 IWatch - 这是一个基于 inotify 的 perl 脚本,可以满足您的需求:

http://sourceforge.net/projects/iwatch/

您也可以使用inotify-tools自行推出,尤其是inotifywait。从该页面修改示例 #2(未经测试):

#!/bin/sh
file=logfile
cp $file $file.last
while true; do
  EVENT=$(inotifywait --format '%e' $file)
  [ $? != 0 ] && exit
  [ "$EVENT" = "MODIFY" ] && ( diff $file $file.last | mail ... ) && cp $file $file.last
done
Run Code Online (Sandbox Code Playgroud)

您还可以保留一个字节/行计数器并仅邮寄新的字节/行,但使用 diff 更简单。如果文件变大并且不断变化,它可能会导致性能问题。