私の目標は、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 を参照)。
そのため、ログ ファイルと電子メールの両方にエラー メッセージが含まれています。