cron が /dev/null にリダイレクトしてもメールの送信を停止しないのはなぜですか?

cron が /dev/null にリダイレクトしてもメールの送信を停止しないのはなぜですか?

いくつかの cron タスクがあり、そのうちのいくつかはメールの送信を停止しません。

タスクの例は次のとおりです。

*/2 * * * * php アプリ/コンソール mautic:email:fetch > /dev/null 2>&1

(問題のあるタスクはすべて Mautic タスクです)。

メールを避けるためにいくつかの方法を試しました:

> /dev/null
>/dev/null
>/dev/null 2>&1
>/dev/null 2>&1 || true
|| true

いずれも実行ごとにメールを送信し続けます。

メールの例:

/bin/sh: 1: 作成できません 1: 権限が拒否されました

(これは奇妙なエラーだとは思いますが、これは例です。エラーを解決して黙らせるのではなく、解決する必要があることはわかっていますが、通常の方法ではなぜエラーを黙らせることができないのかを知りたいのです)。

質問は、タスクの結果をリダイレクトしたり、|| trueを使用してタスクの結果を変更したりしても、cronが電子メールを送信し続けるのはなぜですか?私が見つけた唯一の解決策は(リンクされた質問で)、追加することです

メール宛先=""

「通常の」(またはスパムではない) cron タスクの後 (そして他のタスクの前)。

関連する質問:/dev/null/ への cronjob を完全に無音にするにはどうすればよいでしょうか?

答え1

この/bin/sh: 1: cannot create 1: Permission deniedエラーは、リダイレクトにタイプミスがあるために発生する可能性があります。 の代わりに2>&1または2>1を使用している可能性があります2>1&。(通常、ホーム ディレクトリに という名前のファイルを作成しようとする1と成功しますが、 という名前のファイルが1既に存在し、書き込み可能でない場合は、そのエラーが発生します。)

このエラーが黙示されない理由は、出力がリダイレクトされたコマンドからのメッセージではないからです。このメッセージは、コマンドのリダイレクトを設定しようとしている間にシェルによって報告されています。シェル自体からの出力はリダイレクトされていないため、メッセージが収集されcron、電子メールで送信されます。

関連情報