我有以下命令作为 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] << ""