スクリプトでエラーが発生したときにエラーログを含む電子メールを送信するようにcronをどのように取得しますか?

スクリプトでエラーが発生したときにエラーログを含む電子メールを送信するようにcronをどのように取得しますか?

SQLデータベースでエラーを確認し、エラーをログファイルに記録するスクリプトを実行するcronジョブがあります。ログファイルは、スクリプトを実行するコマンドに提供されます。スクリプトでエラーが検出された場合にのみ電子メールを受信したい場合は、電子メールにログを含めたいと思います。スクリプトでエラーが見つからない場合は、電子メールを受信したくありません。明らかに、スクリプトはエラーが見つからなかったときにログに記録します(私はこれを書いていません)。

    20 6-10 * * 1-5 ~/job_failure_test.sh -o ~/job_fail.log 2>&1 /dev/null | mail -s "Errors" [email protected] < ~/job_fail.log

これまで、この行はログにエラーが記録されたときに私に電子メールを送信しますが、更新されたログは送信しません。最後に実行されたクローンジョブのログを私に送信します。

答え1

ただ変えてください(A管路)から||または)(スクリプトが終了コードを正しく使用していると仮定)エラーが発生した場合にのみ出力するようにスクリプトを変更する方が良いですが:

[email protected]
[email protected]
20 6-10 * * 1-5 ~/job_failure_test.sh

醜い方法;

20 6-10 * * 1-5 ~/job_failure_test.sh > ~/job_fail.log 2>&1 || mail -s "Errors" [email protected] < ~/job_fail.log

答え2

この機能はcronに組み込まれています!コマンドが出力を生成するか、ゼロ以外の状態を返す場合、cronは電子メールを送信します。

多くの最新のディストリビューションでは、ローカル電子メールを設定しません。そうでない場合は、メール転送エージェント(MTA)をインストールしてください。たとえば、参照してください。このスレッドUbuntuの場合、またはメールをローカルに転送するための最小MTA(cron用)?最小限のものを絶対にしたい場合。または、EximやPostfixなどの一般的なMTAをインストールし、ローカル転送専用に設定します(例:このスレッド) Debian の場合。ローカル電子メールを設定したら、お気に入りのメールクライアントを使用してローカル電子メールを読むことができます。

メールをローカルで読むのではなくファイルを作成できます~/.forwardすべてのローカル電子メールが配信される外部電子メールアドレスが含まれています。転送を選択した場合は、外部にメールを送信できるMTAが必要です("スマートホスト")。

または、MAILcrontabで変数を設定してそのアドレスに直接電子メールを送信します。また、システムが外部に電子メールを送信できる必要があります。

関連情報