2

我正在寻找一种简单的方法来持续监控日志文件,并在每次日志文件更改时向我发送电子邮件通知(已添加新行)。

系统在 Raspberry Pi 2 (OS Raspbian /Debian Stretch) 上运行,日志监控作为守护进程运行的 GPIO python 脚本。

我需要一些非常简单和轻量级的东西,甚至不关心新日志条目的文本,因为我知道它在说什么,它总是一样的。最后24行文字。

此外,每天午夜都会重新创建 log.txt 文件,因此这可能代表另一个问题。

我已经有一个可以工作的 python 脚本通过 gmail 向我发送一封简单的电子邮件(称为 sendmail.py)

到目前为止,我尝试的是创建和运行以下 bash 脚本:

监控日志.sh

#!/bin/bash tail -F log.txt | python ./sendmail.py

问题是它只是在我每次执行它时发送一封电子邮件,但是当日志实际更改时,它就退出了。

我对linux真的很陌生,如果我错过了什么,我深表歉意。

干杯

4

2 回答 2

1

你要求简单:

#!/bin/bash

cur_line_count="$(wc -l myfile.txt)"
while true
do
    new_line_count="$(wc -l myfile.txt)"
    if [ "$cur_line_count" != "$new_line_count" ]
    then
        python ./sendmail.py
    fi
    cur_line_count="$new_line_count"
    sleep 5
done
于 2018-03-01T22:40:57.580 回答
0

我已经做了很多不同的方法。如果您每分钟运行一个计算行数的 cron 作业(wc -l),则将其与存储的计数(例如在 /tmp/myfilecounter 中)进行比较,并在数字不同时发送电子邮件。

如果您有 inotify,当文件更改时,还有更直接的方法可以“唤醒”,例如https://serverfault.com/a/780522/97447https://serverfault.com/search?q=inotifywait

如果您不介意将包添加到系统中,那么 incron 是一种在文件或目录被修改时运行脚本的非常方便的方法,并且看起来它在 raspbian 上受支持(内部它使用 inotify)。 https://www.linux.com/learn/how-use-incron-monitor-important-files-and-folders。看起来很简单:

sudo apt-get install incron
sudo vi /etc/incron.allow  # Add your userid to this file (or just rm /etc/incron.allow to let everyone use incron)
incron -e                  # Add the following line to the "cron" file
/path/to/log.txt IN_MODIFY python ./sendmail.py

你就完了!

于 2018-03-01T22:43:32.703 回答