19

cron で毎日実行される Python スクリプトがいくつかあります。スクリプトから標準エラー出力がある場合にのみ、cron からメールを送信するにはどうすればよいですか? 複数の受信者にメールを送信し、cron エントリごとに件名を個別に設定できるようにしたいと考えています。

私はこれを試しました:

./prog > /dev/null | mail . . . 

しかし、うまくいきませんでした -- STDERR がない場合でも、空のメールを受け取ります。スクリプト自体でこれを行う必要がありますか?

これが基本的なように思われる場合は申し訳ありませんが、私はたくさんグーグルで検索しましたが、これが簡潔に答えられているようには見えません.

4

6 に答える 6

26

cron の場合、メールをパイプする必要はありません。cron デーモンは、コマンドの出力を自動的にメールで送信します。crontab エントリは次のようになります。

# every minute
* * * * * ./prog >/dev/null

STDERR 出力がない場合、メールは届きません。

于 2009-09-08T21:59:45.490 に答える
15

メール v1.6 には、本文が空のメッセージを送信しないオプションがあります。

 -E      Do not send messages with an empty body.  
         This is useful for piping errors from cron(8) scripts.

これはあなたが探しているものかもしれません。

于 2010-03-05T20:17:18.103 に答える
15

あなたは間違った質問をしています。mail(1) を使用して電子メールを送信する場合、cron にあることはもはや関係ありません。実際に必要なのは、stderr をメールの stdin にパイプすることです。通常のパイプは stdout から stdin へのものなので、これを解決する最も簡単な方法はリダイレクトです:

{ /prog > /dev/null ; } 2>&1 | mail ...

または、リダイレクトの順序がわかりにくいため、あまり明確ではありません。

/prog 2>&1 > /dev/null | mail ...

于 2011-01-04T14:08:06.033 に答える
8

ファイル テストは、 -s ファイルが存在し、サイズが 0 より大きいかどうかを示します。

./prog >/dev/null 2>some/file ; if [ -s some/file ] ; then mail < some/file ; fi
于 2009-09-08T22:13:52.543 に答える
-2

SCRIPT に通知が必要な STDERR を生成する可能性のあるコマンドがある場合は、スクリプト自体の中で mail または mailx 呼び出しを使用する必要があります (else または の場合)。cron ジョブの STDOUT および STDERR リダイレクトは、cron ジョブのEXECUTION STDOUT および STDERR に対してのみ有効です。hkmalyはnでそれを正しく持っていました

于 2012-06-21T16:18:44.860 に答える