如果主体不为空,则从命令行发送邮件

我想写一个简单的脚本来提醒我日志是否改变。 为此,我使用grep来查找我感兴趣的行。现在,它的工作原理是这样的:

grep line /var/log/file | mail -s Log email@domain.tld 

问题是,即使没有find匹配的行,这也会发送邮件。 mailutils的mail实用程序似乎没有开关,告诉它放弃有空的邮件。

有没有一个简单快捷的方法呢?

 output=$(grep line /var/log/file); [[ -n "$output" ]] && mail -s Log email@domain.tld 

或者你可以把它做成一个cron工作,然后如果它产生任何输出,它将通过电子邮件发送给用户。 您可以编辑/ etc / aliases文件(然后运行newaliases命令)发送邮件到不在框中的地址。

cron条目的ex(你将不能设置主题行

 1 0 * * * grep line /var/log/file 

或者你可以得到的工具 – 这可能是你想要的

grep line / var / log / file | ifne mail -s Log email@domain.tld

ifne命令它可以从epel回购centos和RHEL。 我找不到到在线手册页的链接,但它在那里

ifne(1)
ifne(1)

名称ifne – 如果标准input不为空,则运行命令

大纲ifne [-n]命令

说明当且仅当标准input不为空时,ifne运行以下命令。

选项-n反向操作。 如果标准input是强制的,则运行该命令。

  Note that if the standard input is not empty, it is passed through ifne in this case. 

示例查找。 名核心| ifne邮件-s“find核心文件”root

作者Javier Merino版权所有2008

  Licensed under the GNU GPL 2008-05-01 ifne(1) 

“man mail”告诉我,如果body是空的,参数-E会停止发送邮件。 对我来说工作得很好。

-E

如果传出的消息在其第一个或唯一的消息部分中不包含任何文本,则不要发送它,而是静静丢弃它,在程序启动时有效地设置skipemptybodyvariables。 这对从cron(8)启动的脚本发送消息很有用。