一部のファイルで引き続きエラーを出力するには、cronジョブが必要ですが、同時に電子メールで送信する必要もあります。それはいくつかのトリックなしでは不可能のようです。
私は this を見つけましたが、助けにはなりませんでした。
それを行う最も簡単な方法は何でしょうか?
私があなたの質問を正しく理解しているなら、あなたはエラー(出力ではない)をログファイルに送り、そしてそれらを電子メールで送りたいと思うでしょう。
これを行うには、tee
とstdout/stderrリダイレクトの組み合わせを使用します。
cron(8) のマンページによると、cronがメールを処理できます。この努力を不必要に複製する必要はありません。
コマンドを実行すると、出力はcrontabの所有者(または、crontabのMAILTO環境変数で指定されているユーザー(存在する場合))にメールで送信されます。
ここでの秘訣は、STDERRをログファイルと電子メールに送信することですが、STDOUTには送信しません。次の例は、これを行う方法を示しています。
スクリプトが次のコマンドを実行するとします。 ls tmp/foo
が成功したため、この出力はSTDOUTに送られます。 ls tmp/bar
はエラーを生成するため、この出力はSTDERRに送信されます。
$ ls tmp/foo tmp/bar
ls: tmp/bar: No such file or directory
tmp/foo
次のcronジョブはSTDOUTを非表示にしますが、STDERRを/var/log/test.logにリダイレクトします。
* * * * * ls tmp/foo tmp/bar 2>&1 >/dev/null | tee -a $HOME/var/log/test.log
結果は次のとおりです。電子メールと〜/ var/log /test.logはどちらも同じことを言います。
メールの本文には次のように書かれています。
ls: tmp/bar: No such file or directory
ログファイルには同じことが書かれています。
$ cat ~/var/log/test.log
ls: tmp/bar: No such file or directory
追加のボーナスとして、STDERRとSTDOUTをログファイル(たまにしか見ない)に送信することもできますが、STDERRを画面(手動で実行する場合)または電子メール(cronから実行する場合)に送信します。長時間実行されるビルドスクリプトには、次のスニピットを使用します。
{ { ./configure && make && make install ; } >> $LOGFILE ; } 2>&1 | tee -a $LOGFILE
tee
を使用します:
MBPro-ABustardo:~ abustardo$ echo foo |tee tmp
foo
MBPro-ABustardo:~ abustardo$ cat tmp
foo
あなたの場合:
[your script] 2>&1 |tee [some local local file] |mail -s [subject] [email protected]
これはあなたの質問に答えますか? https://stackoverflow.com/questions/1396506/cron-send-email-with-stderr-but-not-stdout
Cronは、/dev/null
に指示されない限り、実行のたびに電子メールを送信することになっています。