3

私の目標は、cronjob エラーを保存してメールで送信することです。標準出力は気にしないので、/dev/null にリダイレクトします。

メールの送信は、crontab の次の設定によって行われます。

MAILTO=my@email.com

次のコマンドで実行しようとしました:

* * * * * /path/to/script.sh > /dev/null 2 >> /path/to/file.log

エラーは問題なくメールで送信されます。ログ ファイルは作成されますが、です。

私は何を間違っていますか?

================================================== ================================

解決策を見つけました。ご協力ありがとうございました!(回答として投稿できないため、ここで解決策を修正しています。)

このリファレンスを使用しました stderr をパイプにリダイレクトするにはどうすればよいですか?

# version 2: redirect stderr to the pipe without getting stdout (it's
# redirected to /dev/null)
myprog 2>&1 >/dev/null | grep ...

私の解決策は次のとおりです。

#crontab    
MAILTO=my@email.com
* * * * * /path/to/script.sh 2>&1 >/dev/null | tee -a /path/to/file.log

説明: stdout を取得せずに stderr をパイプにリダイレクトし、tee -a を使用して stderr をログ ファイルに追加し、それを端末に出力すると、電子メールに自動的にリダイレクトされます (MAILTO を参照)。

そのため、ログ ファイルと電子メールの両方にエラー メッセージが含まれています。

4

2 に答える 2

4

私の解決策は次のとおりです。

#crontab    
MAILTO=my@email.com
* * * * * /path/to/script.sh 2>&1 >/dev/null | tee -a /path/to/file.log

説明は、私の最初の投稿で上記を参照してください。

于 2013-10-19T06:31:42.520 に答える
1

これを試してください、それは動作します

* * * * * script.sh >/dev/null 2>> /path/to/file.log  || echo "error check log file"
于 2013-10-18T17:46:06.177 に答える