跟踪实时日志文件并将匹配内容输出到电子邮件

跟踪实时日志文件并将匹配内容输出到电子邮件

到目前为止:

#!/bin/bash

tail -fn0 /var/log/dirsrv/redacted-domain/audit | \
while read line ; do
        echo "$line" | grep -C 5 -i "add: member"

        if [ $? = 0 ]
        then
                 mail -s "New User Added" [email protected] > /dev/null
        fi
        echo "$line" | grep -C 5 -i "add: nsaccountlock"

        if [ $? = 0 ]
        then
                 mail -s "Account Disabled" [email protected] > /dev/null
        fi
done

我想从文件中获取 grep 匹配的内容/var/log/dirsrv/redacted-domain/audit并将它们放入电子邮件中[email protected]。使用上述循环将 grep 语句放入电子邮件本身感觉是多余的(并且无论如何都不起作用)。

抱歉,我应该包含一个正在 grep 的示例:

time: 20200114133315 dn: cn=users,cn=groups,cn=accounts,dc=ipa,dc=domain,dc=com result: 0 changetype: modify add: member member: uid=example_user,cn=users,cn=accounts,dc=ipa,dc=domain,dc=com

我想找到类型匹配add: member并将整个 ^ 返回到电子邮件中。

答案1

你有两个选择。

一种是像您正在做的那样发送电子邮件(https://stackoverflow.com/questions/5155923/sending-a-mail-from-a-linux-shell-script

cat /path/to/file | mail -s "your subject" [email protected]

我想您会定期执行此操作,并从某个 crontab 脚本发送此电子邮件。在这种情况下,请在 crontab 顶部键入[email protected]

[email protected]
0 * * * * /path/to/your/script

在这种情况下,服务器将发送一封电子邮件,其中内容将是您的脚本在标准输出上输出的内容。如果脚本没有打印任何内容,则不会发送电子邮件。这样您就不必处理mail脚本中的程序来发送电子邮件。只需让 grep 打印匹配的行,它们就会通过电子邮件发送。问题是,你不能那样改变主题,但我想在内容中添加一行也可以。

相关内容