Email
如果正文不為空,則從命令行發送郵件
我想編寫一個簡單的腳本,如果日誌發生更改,它會提醒我。為此,我使用 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)