我有以下命令作為 cronjob 的一部分。當我通過 cron 或在命令行運行命令時,我得到Null message body; hope that's ok
.
電子郵件的內容是空的,但當我檢查文件時,/tmp/sdplogs.out
它包含內容。
該腳本/dproxy/scripts/cleanSDP2xLogs.sh
將輸出發送到文件/tmp/sdplogs.out
。
我究竟做錯了什麼?任何幫助將不勝感激。
$ /dproxy/scripts/cleanSDP2xLogs.sh | mail -s 'SDP2.X Prod LogArchiving Report' [email protected] < /tmp/sdplogs.out
Null message body; hope that's ok
答案1
您需要將 替換|
為&&
或讓腳本將資料輸出到 stdout 並使用|
。
使用 時&&
,mail
僅當腳本以 0 退出時才會執行該指令。
使用管道字元時,您的腳本需要將資料傳送到 stdout,以便管道可以將其傳遞到mail
.
在您編寫的內容中,腳本將資料寫入檔案並mail
從檔案中讀取在平行下——並mail
最終在腳本寫入任何內容之前讀取該文件。
答案2
/dproxy/scripts/cleanSDP2xLogs.sh | mail -s 'SDP2.X Prod LogArchiving Report' [email protected] < /tmp/sdplogs.out
您正在將命令的輸出cleanSDP2xLogs.sh
通過管道傳輸mail
,我認為這不是您的意思。看來您想要先執行cleanSDP2xLogs.sh
產生 /tmp/sdplogs.out ,然後將 /tmp/sdplogs.out 輸入到郵件指令中。
如果是這種情況,只需替換|
為;
就可以了:
/dproxy/scripts/cleanSDP2xLogs.sh; mail -s 'SDP2.X Prod LogArchiving Report' [email protected] < /tmp/sdplogs.out
答案3
作為附件使用的另一種方法-a
:
/dproxy/scripts/cleanSDP2xLogs.sh
mail -s 'SDP2.X Prod LogArchiving Report' -a /tmp/sdplogs.out [email protected] << ""