web-dev-qa-db-ja.com

cron.daily、cron.hourlyなどのジョブのcronエラーに関する電子メールのみ

/etc/cron.daily/etc/cron.hourly/etc/cron.weeklyなどで)実行され、結果をroot@localhostに電子メールで送信するcronジョブがいくつかあります。ジョブが成功した場合はこれらのメールを停止し、エラーが発生した場合にのみメールを送信します(これは、stdout/dev/nullにリダイレクトすることで実行できると理解しています)。個々のcronジョブに対してこれを行う方法は理解していますが、これらの特別なディレクトリ内のスクリプトはrun-partsを使用して実行されます。これらのスクリプトの成功メールを抑制するための最良の方法は何ですか?

8
jrdioko

プログラムのラッパーの1つを使用すると、問題が発生したときにすべてを出力し、それ以外の場合はstdoutを飲み込むことができます。

一例として、 cronic の場合があります。「cronic」を「run-parts」の前に追加するだけです。例:

# m h dom mon dow user  command
 17 *  *   *   *  root  cd / && /etc/cronic run-parts --report /etc/cron.hourly

どこ /etc/cronicは、言及されたWebサイトからダウンロードされた実行可能なクロニックスクリプトのある場所です。

5

成功した電子メール通知を/dev/nullに送信して、通知が消えるようにする必要があります。

しかし、失敗した電子メール通知を見たいと思います。

つまり、最初にstdout/dev/nullに転送し、次に/dev/stderrstdoutに転送する必要があります。

cronジョブのリダイレクト部分をに変更してみてください

>/dev/null 2>&1

このリンク を参照してください

5
pavium
  • スクリプトが正常に動作している場合、スクリプトは成功した場合はSTDOUTにのみ書き込み、エラーが発生した場合はSTDERRに書き込みます。
  • デフォルトでは、cronはスクリプトが書き込むすべてのものをSTDOUTまたはSTDERRArch wiki )。

したがって、エラー通知を保持したい場合は、STDERRをリダイレクトせず、STDOUTだけをリダイレクトしてください。

COMMAND > /dev/null

通常の>/dev/null 2>&1を実行すると、両方を効果的に抑制できます( bashドキュメント )。

  1. stdinファイル記述子を/ dev/nullのコピーにします。
  2. stderrファイル記述子をstdout(すでに/ dev/nullを指している)のコピーにします。
1
morallo