ユーザーpi(Raspbian Stretchを実行しているRaspberry Pi)に対して15分ごとにジョブを実行するようにcronを設定しました。
6,21,36,51 * * * * /usr/bin/mosquitto_sub -h Pi3Plus.local -v -C 1 -t weather >> weather.log
また、Gmail経由でメールを送信するようにssmtpを設定しました。
cronジョブはサーバー接続に頻繁に失敗し、エラーメッセージを生成します。
問題は、ユーザーpiにメッセージを送信しようとし、ssmtpがそれをpi@gmailに変更してからGmailに送信しますが失敗することです。
ssmtp、ssmtp.conf、cron、crontabのドキュメントを読みましたが、これらのメッセージを停止するエントリが見つかりませんでした。
エラーの発生を防ぐために、cronジョブでエラーメッセージをキャプチャするスクリプトを作成できます。
答え1
~からクローンタブマニュアル:
LOGNAME、HOME、SHELLに加えて、cron(8)はMAILTOを調べて、「this」crontabでコマンドを実行したためにメールを送信する理由があるかどうかを確認します。 MAILTO が定義され、空でない場合、メールは指定されたユーザーに送信されます。MAILTOが定義されているが空の場合(MAILTO = "")、メールは送信されません。それ以外の場合は、電子メールがcrontabの所有者に送信されます。
この例に示すように、crontabファイルの先頭に変数を追加するだけです(同じマニュアルページからインポートされ、明確にするために少し編集されます)。
# mail any output to 'paul', no matter whose crontab this is
MAILTO=paul
# run five minutes after midnight, every day
5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
答え2
Cron は、コマンドが stdout または stderr に出力を「リーク」する場合にのみ電子メールを送信します。
cronコマンドラインまたはスクリプト自体内でリダイレクトを使用して、スクリプト全体をブロックにラップできます。
{ myMain; } >/dev/null 2>&1 #.. to discard all output.
{ myMain; } >>myCron.log 2>&1 #.. to have somewhere to check fails.
MAILTO="" 設定はすべてのクローン操作に適用されます。リダイレクトを使用すると、さまざまな結果を取得し、ログをさまざまなファイルに関連付けることができます。