新的日志条目 – >邮件通知

我正在寻找一个脚本(bash / perl / python),每5秒钟由cron调用它将检查是否新行添加到我的特定日志文件。 如果有新行,脚本应该邮寄根目录包含日志事件的通知。

有什么办法可以做到这一点?

你可以试试Tenshi。 它是用Perl编写的,非常容易设置,完全按照你的要求。 来自Ubuntu的软件包描述:

“Tenshi是一个日志监控程序,旨在监视与用户定义的正则expression式匹配的行的一个或多个日志文件并报告匹配情况。正则expression式被分配给具有警报间隔的队列和邮件收件人列表。

Ubuntu软件包( 链接 ),Debian软件包( 链接 )。

这可以通过执行以下任务的bash脚本完成:

  1. 有一个后台进程使用tail -f监视每个日志文件,将输出写入缓冲区。
  2. 定期收获,采取行动和截断缓冲区的位置。

我会使用一个脚本,可能是在init脚本中启动的,而不是一个cron作业。 例如:

 #!/bin/bash RECIPIENT=root SUBJECT="Log monitor" PERIOD=5 # Harvest log buffer every PERIOD seconds # Prepare the log buffer and ensure it is empty LOGBUFFER=/tmp/logbuffer.$$ cp /dev/null $LOGBUFFER # Monitor the log files in the background. # More than one log file can be specified on the command line. for file in "$@"; do tail -f -n0 "$file" | while read line;do echo "$file: $line";done >> $LOGBUFFER & done # Harvest the log buffer while :;do if [ -s $LOGBUFFER ]; then mail -t "$RECIPIENT" -s "$SUBJECT" < $LOGBUFFER cp /dev/null $LOGBUFFER fi sleep $PERIOD done 

这个脚本并不完美(例如,当它退出时会留下一个/tmp/logbuffer.123文件),但它会让你开始。

如果您考虑切换到使用syslog-ng,您可以将其configuration为自动启动一个可以基于syslog消息模式触发电子邮件的shell脚本。 我有这个安全日志logging。

每5秒钟由cron调用一次

Cron的粒度不会比分钟小。 如果你想要这种粒度,你需要incrond。 只是有这样的东西:

 /var/log IN_CLOSE_WRITE /usr/local/sbin/notify.sh $@/$# 

和一封邮件给你的脚本:

 tail $1 | mail -s "New lines in: $1" root 

你可能需要玩正确的事件。 但是这将使得不必以定时的方式启动脚本。 如果您正确设置了incrontab,则可以确保每次脚本启动时都会发生更改。