Linux Grepping并仅在发现某些内容时发送电子邮件
即使找不到任何东西,它仍会发送电子邮件 只有在某些内容被grepped时才发送的方式是什么Linux Grepping并仅在发现某些内容时发送电子邮件,linux,bash,cron,grep,Linux,Bash,Cron,Grep,即使找不到任何东西,它仍会发送电子邮件 只有在某些内容被grepped时才发送的方式是什么 #!/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如果找到匹配项,则
#!/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如果找到匹配项,则返回非零退出代码,如果没有,则返回0。我们只需要检查最后一个返回值(即grep的返回值),然后根据该值有条件地发送邮件。这可能。。。
只需使用-E
在邮件中切换命令:
#!/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
或者将支票放入crontab
自动处理,例如每天一次:
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
如果命令输出内容,Cron将发送邮件
但是,在重读这篇文章之后
如果不需要转发警报中的邮件的任何部分,则不需要使用管道|
因此,您可以这样使用条件:
@daily ( /usr/src/chkrootkit-$VERSION/chkrootkit ) | grep 'INFECTED|Vulnerable'
-q
切换到grep
确保保持安静。对于GNU Mailutils,您可以使用-E'set nonullbody'执行类似操作。:
#!/bin/bash
( /usr/src/chkrootkit-$VERSION/chkrootkit ) | # Binary
grep -q 'INFECTED|Vulnerable' &&
/bin/mail -s 'CHROOTKIT Weekly Run ($SERVERNAME)' $EMAIL
见:
空体
类型:布尔值默认值:True 控制邮件是否接受正文为空的邮件。默认值true表示发送此类消息,并显示警告(通常称为“Null message body;hope that's ok”)。可以使用nullbodymsg变量设置警告文本(见下文) 如果未设置nullbody,mail将自动忽略此类消息。这在“crontab”文件中很有用,可以避免在没有重要事情发生时发送邮件。例如,下面的“crontab”条目仅在实用程序在其标准输出或错误中输出某些内容时才会发送邮件: 只需将上述内容放入cron中,以获得一些时间表:
grep whatever wherever | mailx -E'set nonullbody' -s EMAIL_SUBJECT your_email_address@example.com
您错过了
grep
和mail
之间的管道。不幸的是,常见的GNU Mailutils 2.2版本的mail使用-E开关来执行命令,并且没有与您描述的“不要发送空正文的消息”开关等效的开关。我正在谈论的是。(不是;-)好的,第二部分使用grep-q
而不是mail-E
,这可以完成任务。
*/5 * * * * some-prog 2>&1 | /bin/mail -E'set nonullbody' -s 'Periodic synchronization'