cronjobが/var/mail/$USERに書き込まないようにしますか?

cronjobが/var/mail/$USERに書き込まないようにしますか?

crontabmacOSでは、cronjobはコマンド出力および/またはエラーメッセージ(cronが失敗した場合)をファイルに書き込むように設定されています/var/mail/$USER。これを防ぐことはできますか?私は試した:

* * * * *      /sbin/ping -c1 website.com ... 2>&1 >/dev/null

ドメインの到達成功、失敗の有無にかかわらず、出力はpingメールファイルに保存されます。

答え1

cronデーモンは書かれていませんが、/var/mail/$USER何かが何でも出力または失敗したときにユーザーに電子メールを送信するのではなく、システムのメール配信サービスを介してファイル(ユーザーのメール受信トレイ)に書き込まれます。

電子メールを送信するためにcronデーモンをオフにするには、MAILTOcrontabファイルでこの変数をnull値に設定します。

MAILTO=""

# rest of file with job schedules goes here

crontab(5)macOSシステムマニュアルから:

LOGNAME、、、HOMEに加えて、「this」crontabでコマンドを実行した結果、メールを送信する理由があるかどうかを調べます。定義されている場合(空でない場合)、メッセージは指定されたユーザーに送信されます。定義したが空の場合()メールは送信されません。 [...]SHELLcron(8)MAILTOMAILTOMAILTOMAILTO=""

このようにジョブ出力とエラー通知の電子メール送信をオフにする場合は、別の方法でジョブを記録する必要があります。たとえば、次のようになります。

* * * * *      /sbin/ping -c1 website.com ... >>/tmp/ping.log 2>&1
0 0,12 * * *   mv /tmp/ping.log /tmp/ping.log.old

pingこれにより、特定のファイルへの出力が追加され、真夜中と正午にそのファイルが別の場所に移動されます(リダイレクトは/dev/null後から進むことに注意してください)。

失敗した場合は、明示的に電子メールを送信することもできますping

* * * * *      /sbin/ping -c1 website.com ... >>/tmp/ping.log 2>&1 || mail -s "ping failed, do something" "$LOGUSER"

pingゼロ以外の終了ステータスが返されるたびに、指定されたヘッダーを含む空の電子メールが送信されます。

MAILTOまたは、ログファイルを使用したり電子メールを送信したりすることなく、最初から直接リダイレクトを取得できます。

* * * * *      /sbin/ping -c1 website.com ... >/dev/null 2>&1

これにより、失敗するたびに電子メールが送信されますが、ping毎分コマンド出力は送信されません。

関連情報