Email

如果正文不為空,則從命令行發送郵件

  • October 2, 2021

我想編寫一個簡單的腳本,如果日誌發生更改,它會提醒我。為此,我使用 grep 來查找我感興趣的行。現在它的工作方式如下:

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

問題是即使沒有找到匹配的行,這也會發送郵件。來自 GNU Mailutils 的郵件實用程序似乎沒有開關告訴它丟棄正文為空的郵件。

有沒有一種快速簡便的方法可以做到這一點?

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

或者你可以把它變成一個 cron 作業,然後如果它產生任何輸出,它將通過電子郵件發送給使用者。您可以編輯 /etc/aliases 文件(然後執行 newaliases 命令)以將郵件發送到不在盒子上的地址。

Ex of cron entry(您將無法設置主題行

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

或者您可以獲得 ifne 實用程序 - 這可能就是您想要的

grep 行/var/log/file | ifne mail -s 記錄 email@domain.tld

ifne 命令可從 centos 和 RHEL 的 epel 儲存庫中獲得。我找不到線上手冊頁的連結,但它在那裡

ifne(1)

ifne(1)

NAME ifne - 如果標準輸入不為空則執行命令

概要 ifne

$$ -n $$命令 描述 ifne 當且僅當標準輸入不為空時執行以下命令。

選項 -n 反向操作。如果標準輸入為空,則執行該命令。

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

範例查找 . -名稱核心 | ifne mail -s “找到核心文件” root

作者版權所有 2008 年哈維爾·梅里諾 (Javier Merino)

   Licensed under the GNU GPL

                              2008-05-01                           ifne(1)

引用自:https://serverfault.com/questions/349989