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

これにより、何も見つからなくても電子メールが送信されます。

何かがgrepさ​​れた場合にのみ送信する方法は何でしょうか?

4

3 に答える 3

7

This maybe...

Simply use -E switch in mail command:

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

or place your check in a crontab for automatic processing, for ex once a day:

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

Cron will send a mail if command output something.

But, after re-reading this

If there is no need to forward any part of the mail in the alert, there is no need to use the pipe |.

So you could use condition in this way:

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

The -q switch to grep ensure to stay quiet.

于 2013-02-01T22:59:12.357 に答える
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 に答える