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