Cronジョブからの出力を処理する正しい方法は、ファイルにリダイレクトすることです。
0 * * * * /bin/date >> /var/log/date.log 2>&1
ただし、管理者は怠惰、物忘れ、または無知であり、これらのリダイレクトを行わない場合があります。この場合、ジョブの出力は$ MAILTOまたは所有ユーザーまたはrootにメールで送信されます。私が管理する一部のボックスでは、メールが無効になっているため、この出力はブラックホールに入ります。私が思っているのは、cronにジョブの出力を取得し、メールで送信するのではなく、どこかにキャッチオールログファイルに投げる方法はありますか? Ubuntuを使用しています(8.04ですが、9.04に移行しています)。これにはそのような解決策のヒントがあります ランダムなGoogleの結果 ですが、OPはcronの出力とcronのジョブの出力について混乱している可能性があります。
私はスクリプトやハッキングを少し含むソリューションに心を開いていますが、理想的にはこれがどこかに設定できる構成ビットになるでしょう。 man cron
にヒントがありません。ありがとう!
cronie
cron(Gentooハンドブックなどで推奨)の場合、cron呼び出しに「-s」引数があり、syslogを使用してジョブ出力をシステムログに送信します。
「メールが無効になっています」と言ったときの意味がわかりません。しかし、/etc/aliases
にパイプに向けられたエイリアスを設定することができますか?何かのようなもの
root: "|/bin/cat >> /var/log/cron.log"
簡単な答えは「いいえ」です。設計上、cronはcrontabの所有者にメールを送信します。標準のcronでは、これを変更する方法はありません。
私が考えることができる最良の方法は、この動作でユーザーのメールボックスではなくログファイルにメールをダンプするマシンでMTAを構成することです。
私があなたが求めていることがUbuntu(または他の)cronで実際に可能であるとは思いません。
Geekmonkeysのアイデアの他に、$ MAILTOをローカルアカウントに設定し、procmailを介して出力をルーティングすることもできます。
このようなcronの設定について聞いたことがないので、スクリプトのルートを使用します。
/ var/spool/cron/*をパトロールするcronジョブを作成し、それがないジョブにリダイレクトを追加します。
「標準cron」とは何なのかわかりません。 cronデーモンはたくさんあり、ディストリビューションによって使用するデーモンは異なります。 Vixie cronが最も広く展開されているので、おそらくそれがあなたの意図したことです。しかし、いくつかのディストリビューションでは、それはデフォルトではありません。
Arch Linuxのデフォルトである Dillon's cron (dcron)の開発を引き継ぎました。他のディストリビューションでもこれを使用していますが、それが他のどこかでデフォルトかどうかはわかりません。 dcronには呼び出しオプション-M
は、sendmailの代わりにカスタムスクリプトを使用することを指定します。スクリプトは引数なしで呼び出され、いくつかの電子メールヘッダーと&>
stdinとしてのcronjobsの出力。 (ない場合&>
出力、スクリプトは呼び出されません。)
もう1つのオプションは、cron_wrapperなどと呼ばれるシェルスクリプトを作成し、次のようにすることです。
#!/ bin/sh eval "$ * >> /var/log/cronlog.log" exit $?
次に、すべてのcrontabに次のようなものが必要です。
* * * * */usr/local/bin/cron_wrapper echo hello
このコードをテストしていないことに注意してください。これは単なるアイデアです。
特定のユーザーのcrontabにMAILTO = ""を設定しないでください。これにより、/ var/spool/mail /内のメールメッセージのロギングが無効になります。