监视文件并在文件更改时发送电子邮件

监视文件并在文件更改时发送电子邮件

我有一个日志文件,偶尔会出现严重错误。每次出现严重错误时,我都希望收到一封电子邮件,通知我发生的变化。是否有一个 unix 工具/unix 工具集可以用于此目的?

我想做的是

tail -f logfile | grep CRITICAL > critical.errors
watch tail critical.errors   # And somehow, email on changes. 

但是,watch 命令不会执行任何操作。那么...是否有类似“watch”的功能。或者也许有一个好的现有脚本可以执行此操作?我可以自制一个 bash/python 解决方案,但我宁愿重用现有工具来进行更清晰的错误处理等。

答案1

尝试一下 IWatch - 它是一个基于 inotify 的 perl 脚本,可以满足您的需要:

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

你也可以自己动手inotify 工具,特别是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

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

相关内容