回答:
データをログに記録する従来の「標準」の方法は、メッセージに含まれるメタデータが「ファシリティコード」と優先度レベルであるsyslogであると考えてください。ファシリティコードを使用して、さまざまなサービスからログストリームを分離し、それらをさまざまなログファイルなどに分割できるようにします(ファシリティコードは、従来の意味が固定されているという点で多少制限されていますが)。
syslogにはないのは、さまざまなユーザーのメッセージを分離する方法であり、これはcron
従来のマルチユーザーシステムで必要なものです。すべてのユーザーのcronジョブからのメッセージをシステム管理者のみが閲覧できる共通のログファイルに収集しても意味がありません。一方、電子メールは当然、さまざまなユーザーへのメッセージ送信を提供するため、ここでは論理的な選択です。代わりに、cronが手動で作業を行い、各ユーザーのホームディレクトリにログファイルを作成することもできますが、従来のマルチユーザーUnixシステムはMTAが機能していると想定されるため、cronでの実装はほとんどが無駄な運動。
もちろん、最新のシステムでは、別の選択肢があるかもしれません。
「ロギング」とは、ジョブの実際の出力を保存することを意味すると思います。ジョブの実行はすでに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
、エラーメッセージはメールで送信されます。
これにより、ユーザーは出力先を選択できます。