4
#!/bin/bash
( /usr/src/chkrootkit-$VERSION/chkrootkit ) | # Binary
grep 'INFECTED|Vulnerable' | # Only get found issues
/bin/mail -s 'CHROOTKIT Weekly Run ($SERVERNAME)' $EMAIL # Send EMail

即使什么也没找到,它仍然会发送电子邮件。

什么是只有在某些东西被 grepped 时才发送的方法?

4

3 回答 3

7

这或许...

只需-E在邮件命令中使用 switch:

man -Pcol\ -b mail | grep empty
     -E      Don't send messages with an empty body.


#!/bin/bash
( /usr/src/chkrootkit-$VERSION/chkrootkit ) | # Binary
grep 'INFECTED|Vulnerable' | # Only get found issues
/bin/mail -E -s 'CHROOTKIT Weekly Run ($SERVERNAME)' $EMAIL # Send EMail

或将您的支票放入crontab自动处理中,例如每天一次:

@daily  ( /usr/src/chkrootkit-$VERSION/chkrootkit ) | grep 'INFECTED|Vulnerable'

如果命令输出某些内容,Cron 将发送邮件。

但是,在重新阅读后

如果不需要转发警报中邮件的任何部分,则无需使用pipe |

所以你可以这样使用条件

#!/bin/bash
( /usr/src/chkrootkit-$VERSION/chkrootkit ) | # Binary
    grep -q 'INFECTED|Vulnerable' &&
    /bin/mail -s 'CHROOTKIT Weekly Run ($SERVERNAME)' $EMAIL

-q开关,以确保grep保持安静。

于 2013-02-01T22:59:12.357 回答
4

对于 GNU Mailutils,您可以使用-E'set nonullbody' 执行以下操作:

grep whatever wherever | mailx -E'set nonullbody' -s EMAIL_SUBJECT your_email_address@example.com

请参阅http://mailutils.org/manual/html_section/mail.html:nullbody

类型:布尔
默认值:True

控制邮件是否接受正文为空的邮件。默认值 true 表示已发送此类消息,并显示警告(传统上说“空消息正文;希望没关系”)。可以使用 nullbodymsg 变量设置警告的文本​​(见下文)。

如果 nullbody 未设置,邮件将默默地忽略此类消息。这在“crontab”文件中很有用,以避免在没有重要事件发生时发送邮件。例如,仅当实用程序 some-prog 在其标准输出上输出某些内容或错误时,下面的“crontab”条目才会发送邮件:

只需将上面的内容放在 cron 中以获取一些时间表:

*/5 * * * * some-prog 2>&1 | /bin/mail -E'set nonullbody' -s 'Periodic synchronization'
于 2015-01-27T19:42:41.600 回答
1
#!/bin/bash
( /usr/src/chkrootkit-$VERSION/chkrootkit ) | # Binary
grep 'INFECTED|Vulnerable' # Only get found issues
if [ $? -eq 0 ]
    /bin/mail -s 'CHROOTKIT Weekly Run ($SERVERNAME)' $EMAIL # Send EMail
fi

如果找到匹配项,则 grep 返回非零退出代码,否则返回 0。我们只需要检查最后一个返回值(即 grep 的返回值),并根据它有条件地发送邮件。

于 2013-02-01T22:51:58.800 回答