如果发现了某些内容,请点击并发送电子邮件

时间:2013-02-01 22:48:30

标签: linux bash cron grep

#!/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

即使没有找到任何内容,它仍会发送电子邮件。

只有在某些东西被掠过时才会发送什么方式?

3 个答案:

答案 0 :(得分:6)

这可能......

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

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将发送邮件。

但是,重新阅读后

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

所以你可以用这种方式使用 condition

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

-q切换到grep可确保保持安静。

答案 1 :(得分: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表示发送此类消息,并显示警告(传统上称为“Null消息正文;希望没问题”)。可以使用nullbodymsg变量设置警告文本(见下文)。

     

如果未设置nullbody,邮件将默默忽略此类消息。这在'crontab'文件中很有用,可以避免在没有重要信息发送时发送邮件。例如,下面的'crontab'条目仅在实用程序some-prog输出标准输出或错误时发送邮件:

将上述内容放入cron中以获取某些时间表:

*/5 * * * * some-prog 2>&1 | /bin/mail -E'set nonullbody' -s 'Periodic synchronization'

答案 2 :(得分: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的返回值),并根据该值有条件地发送邮件。