web-dev-qa-db-ja.com

シェルスクリプトの出力をcronジョブとしてメールで送信する方法

シェルスクリプトを実行するcronジョブを作成しました。シェルスクリプトを実行して出力をキャプチャし、完了時にメールで送信してほしい。これが私がこれまで持っていたものですが、メールメッセージの本文は空です。

私は以下のすべてを試しました:

/root/myscript.sh | tee output.txt | mail -s "Email subject" [email protected]

/root/myscript.sh | tee output.txt | mail -s "Email subject" [email protected] &> /dev/null

/root/myscript.sh | tee output.txt && mail -s "Email subject" [email protected] < output.txt &> /dev/null

/root/myscript.sh > tee output.txt && mail -s "Email subject" [email protected] < output.txt &> /dev/null

これらはすべて正常に実行されますが、本文が空のメールが生成されます。スクリプトを実行すると、標準出力に出力が生成されます。

5
Nilpo

リダイレクト時に画面テキストが失われる最も可能性の高い理由は、出力が標準エラーデバイスに送信されていたことです。これは、コマンドの実行後にoutput.txtが空の場合に確認されます。

標準エラーと標準出力をリダイレクトするには、次のように2>&1をコマンドに追加する必要があります。

/root/myscript.sh 2>&1 | tee output.txt | mail -s "Email subject" [email protected]

スクリプトのすべての出力がoutput.txtに表示されます。

9
AFH