到目前为止:
#!/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 打印匹配的行,它们就会通过电子邮件发送。问题是,你不能那样改变主题,但我想在内容中添加一行也可以。