メッセージ本文が空です。問題ないと思います

メッセージ本文が空です。問題ないと思います

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にパイプしていますが、これはおっしゃっていることではないと思います。まず実行して/tmp/sdplogs.out を生成し、次に /tmp/sdplogs.out をメール コマンドに渡したいmailようです。cleanSDP2xLogs.sh

その場合は、次のよう|に置き換えるだけで;問題ありません。

/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] << ""

関連情報