CronがロギングにMTAを必要とするのはなぜですか?これには特別な利点はありますか?他のほとんどのユーティリティのようにログファイルを作成できないのはなぜですか?
データをログに記録する従来の「標準」方法は syslog であり、メッセージに含まれるメタデータは「ファシリティコード」と優先度レベルであると考えてください。ファシリティコードを使用して、さまざまなサービスからのログストリームを分離し、それらを異なるログファイルなどに分割できます(ファシリティコードは、従来の意味が固定されているという点で多少制限があります)。
Syslogにないものは、さまざまなユーザーのメッセージを分離する方法であり、従来のマルチユーザーシステムでcron
が必要とするものです。すべてのユーザーのcronジョブからのメッセージを、システム管理者だけが表示できる共通のログファイルに収集しても意味がありません。一方、電子メールは当然、さまざまなユーザーへのメッセージ送信を提供するため、ここでは論理的な選択です。代替手段は、cronが手動で作業を行い、各ユーザーのホームディレクトリにログファイルを作成することですが、従来のマルチユーザーUnixシステムはMTAが機能していると想定されるため、cronでの実装はほとんどの場合無駄な運動。
もちろん、現代のシステムでは、代替の選択肢があるかもしれません。
「ロギング」とは、ジョブの実際の出力を保存することを意味すると思います。ジョブの実行中は/var/cron/log
のcronログにすでに記録されています(パスはシステム間で異なる場合があります)。このログにMTAは必要ありません。
Cronジョブは、そのcrontabが含まれるユーザーとして実行されます。
一般的なケースでは、このユーザーがシステム上にファイルを作成できる保証はありません(ユーザーはインタラクティブユーザーではない可能性があります)。特に、通常ログが作成される/var
階層の下にはありません。したがって、ジョブからのエラーやその他の出力をユーザーに通知する最も安全な方法は、それらを収集してユーザーに電子メールで送信することです。これにより、ユーザーはアカウントが参照できるようにメールのリダイレクトを設定することもできます。優先する場所のエラー。
ユーザーがジョブの出力をファイルに保存したい場合は、crontabで簡単なリダイレクトを行うことで可能です。
0 */2 * * * "$HOME/scripts/myscript" >"$HOME/logs/myscript.log" 2>&1
これにより、1時間おきに1時間おきに"$HOME/scripts/myscript"
が実行され、all出力が"$HOME/logs/myscript.log"
に保存されます。すべての出力がリダイレクトされるため、このジョブを実行してもメールは作成されません。 2>&1
がない場合でも、エラーメッセージはメールで送信されます。
これにより、ユーザーは出力先を選択できます。