我有一個 cron 作業,如果失敗則輸出 HTML。如果成功,則不會輸出任何內容,在這種情況下我不會收到郵件。如果它確實失敗並寫入 HTML,cron 會向我發送郵件,但它是純文字形式,很難閱讀。
我想出了兩個部分解決方案,但還沒有弄清楚如何讓它真正發揮作用。第一個是讓我的作業在輸出頂部列印 MIME 說明符,如下所示:
Mime-Version: 1.0
Content-Type: text/html
<html>...
然後我在 cron 中像這樣運行它:
my-job | sendmail my.name
主要問題是即使根本沒有文字我也會收到郵件。第二個問題是我必須將 MIME 類型行添加到我的腳本中,這對於它來說是一個錯誤的位置(不優雅,但也許可以忍受)。
然後我嘗試使用mail
or mailx
,它可以-E
選擇在沒有文字時跳過發送:
my-job | mail -E my.name
這與 cron 預設所做的差不多。但我想不出任何方法來設定 mail/mailx 的 MIME 類型!一些線上參考資料說這是使用該-a
選項完成的,但在我的系統(Fedora 16)上,採用附件文件名,而不是像其他系統上那樣的mail -a
標題行。Content-Type: text/html
我不想創建臨時文件,檢查其大小等。
- 一種使 cron 郵件以 HTML 形式可讀的方法。
- 使 sendmail 跳過空郵件。
- 在 mailx 中設定 MIME 類型。
- 其他一些方法使用 Fedora 上預設安裝的不同程式。
答案1
不要在命令列上指定收件人,而是呼叫 sendmail-t
並讓腳本產生to:
標頭。 (您也可以subj:
在處理時新增標題。)然後,當沒有輸出時,就沒有收件人,因此也沒有郵件。
答案2
最簡單的方法是在腳本中呼叫 sendmail fom。這樣您就可以控制是否要寄給您任何郵件。
或者,您可以讓腳本返回成功代碼,如果失敗僅當腳本「正確」退出時才運行 sendmail:
$ my-job >/tmp/message && cat /tmp/message | sendmail
告訴&&
bash 僅當第一個指令成功退出時才執行下一個指令(exit 0
在 BASH 或exit(0)
PERL 中)。透過告訴腳本在失敗時以狀態 0 退出,您將使 sendmail 命令僅在失敗時執行。
答案3
您可以如下指定內容類型:
mail -s "$(echo -e "Status Report: $HOSTNAME\nContent-Type: text/html")" "yourmail@"