cronへのロギングにMTAが必要なのはなぜですか?これに特別な利点がありますか?他のほとんどのユーティリティのようにログファイルを生成しないのはなぜですか?
答え1
データを記録する従来の「標準」方式は次のとおりです。システムログここで、メッセージに含まれるメタデータは「施設コード」と優先順位です。施設コードを使用すると、ログストリームを他のサービスから分離し、他のログファイルなどに分割できます。 (施設コードは固定された伝統的な意味を持つため、やや制限的です。)
syslog には、他のユーザーのメッセージを切り離す方法や、他のユーザーからメッセージを切り離す方法はありません。これはcron
既存のマルチユーザーシステムに必要なものです。すべてのユーザーのクローンジョブメッセージをシステム管理者だけが閲覧できる共通ログファイルに収集することは役に立ちません。一方、電子メールは自然に他のユーザーにメッセージを送信する機能を提供するため、論理的な選択です。別のアプローチは、cronに手動でタスクを実行し、各ユーザーのホームディレクトリのログファイルを生成させることです。ただし、既存のマルチユーザーUnixシステムには動作するMTAがあると仮定しているため、cronでこれを実装するのはほとんど役に立たない作業です。
もちろん、最新のシステムには他のオプションがあります。
答え2
「ロギング」とは、ジョブの実際の出力を保存することを意味すると思います。これ走るジョブはcronログに書き込まれます/var/cron/log
(パスはシステムによって異なる場合があります)。このログにはMTAは必要ありません。
クローンジョブは、そのジョブが属するcrontabのユーザーとして実行されます。
通常、このユーザーがシステムからファイルを生成できるという保証はありません(ユーザーは対話型ユーザーではない可能性があります)。特に、/var
一般的にログが生成される階層ではさらにそうです。したがって、エラーやその他の作業結果をユーザーに知らせる最も安全な方法は、それを収集してユーザーに電子メールで送信することです。これにより、ユーザーは自分のアカウントの電子メールリダイレクトを設定して、目的の場所にエラーを表示できます。
ユーザーがジョブの出力をファイルに保存したい場合は、crontabで単純なリダイレクトを使用して保存できます。
0 */2 * * * "$HOME/scripts/myscript" >"$HOME/logs/myscript.log" 2>&1
このジョブは"$HOME/scripts/myscript"
毎時間実行され、保存されます。みんな"$HOME/logs/myscript.log"
すべての出力がリダイレクトされるため、この操作を実行すると電子メールは生成されません。それ以外の場合でも、2>&1
エラーメッセージは電子メールで送信されます。
これにより、ユーザーは出力位置を選択できます。