ここに私が長年使用して成功した別のバリエーションがあります-出力をキャプチャし、エラー時にのみ印刷して、電子メールをトリガーします。これには一時ファイルは必要なく、すべての出力が保持されます。重要な部分は、2>&1
STDERRをSTDOUTにリダイレクトすることです。
デフォルトのcronメーラー設定を介して出力全体を送信します。
1 2 * * * root OUTPUT=`flexbackup -set all 2>&1` || echo "$OUTPUT"
同じですが、特定の住所と件名があります:
(アドレスは、crontabファイル全体にMAILTO = xxxxを設定することでも変更できます)
1 2 * * * root OUTPUT=`flexbackup -set all 2>&1` || echo "$OUTPUT" | mail -s "Failed to backup" an@email.address
エラー時に複数のアクションを実行し、メールに追加することもできます。
1 2 * * * root OUTPUT=`flexbackup -set all 2>&1` || {echo "$OUTPUT" ; ls -ltr /backup/dir ; }
これは単純なコマンドで機能します。複雑なパイプ(find / -type f | grep -v bla | tar something-or-other
)を扱っている場合は、コマンドをスクリプトに移動し、前述のアプローチを使用してスクリプトを実行する方が適切です。その理由は、パイプの一部がSTDERRに出力された場合でも、メールを受信できるからです。