なぜcronはロギングにMTAを必要としますか?


11

cronがロギングにMTAを必要とするのはなぜですか?これに特別な利点はありますか?他のほとんどのユーティリティのようにログファイルを作成できないのはなぜですか?


ちょっとしたことですが、cronにはMTAは必要ないと確信しています。cronメールを別のホストに配送しない限り、必要なのはMDA(メール配信エージェント)だけです。
CVn

回答:


19

データをログに記録する従来の「標準」の方法は、メッセージに含まれるメタデータが「ファシリティコード」と優先度レベルであるsyslogであると考えてください。ファシリティコードを使用して、さまざまなサービスからログストリームを分離し、それらをさまざまなログファイルなどに分割できるようにします(ファシリティコードは、従来の意味が固定されているという点で多少制限されていますが)。

syslogにはないのは、さまざまなユーザーのメッセージを分離する方法であり、これはcron従来のマルチユーザーシステムで必要なものです。すべてのユーザーのcronジョブからのメッセージをシステム管理者のみが閲覧できる共通のログファイルに収集しても意味がありません。一方、電子メールは当然、さまざまなユーザーへのメッセージ送信を提供するため、ここでは論理的な選択です。代わりに、cronが手動で作業を行い、各ユーザーのホームディレクトリにログファイルを作成することもできますが、従来のマルチユーザーUnixシステムはMTAが機能していると想定されるため、cronでの実装はほとんどが無駄な運動。

もちろん、最新のシステムでは、別の選択肢があるかもしれません。


13

「ロギング」とは、ジョブの実際の出力を保存することを意味すると思います。ジョブの実行はすでにcronログインに記録されています/var/cron/log(パスはシステム間で異なる場合があります)。このログに必要なMTAはありません。

cronジョブは、そのcrontabが含まれるユーザーとして実行されます。

一般的なケースでは、このユーザーがシステム上にファイルを作成できるという保証はありません(ユーザーは対話型ユーザーではない可能性があります)。特に、/var通常ログが作成される階層の下にはありません。したがって、ジョブからのエラーやその他の出力をユーザーに通知する最も安全な方法は、エラーを収集してユーザーに電子メールで送信することです。これにより、ユーザーはアカウントの電子メールリダイレクトを設定して、たとえば希望する場所のエラーを確認できるようになります。

ユーザーがジョブの出力をファイルに保存する場合、crontabで簡単なリダイレクトを行うことで保存できます。

0 */2 * * * "$HOME/scripts/myscript" >"$HOME/logs/myscript.log" 2>&1

これは"$HOME/scripts/myscript"1時間おきに1時間おきに実行され、すべての出力をに保存ます"$HOME/logs/myscript.log"。すべての出力がリダイレクトされるため、このジョブを実行してもメールは作成されません。がない場合でも2>&1、エラーメッセージはメールで送信されます。

これにより、ユーザーは出力先を選択できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.