web-dev-qa-db-ja.com

cronは(デフォルトではなく)メールの代わりにジョブ出力をログに書き込むことができますか?

Cronジョブからの出力を処理する正しい方法は、ファイルにリダイレクトすることです。

0 * * * * /bin/date >> /var/log/date.log 2>&1

ただし、管理者は怠惰、物忘れ、または無知であり、これらのリダイレクトを行わない場合があります。この場合、ジョブの出力は$ MAILTOまたは所有ユーザーまたはrootにメールで送信されます。私が管理する一部のボックスでは、メールが無効になっているため、この出力はブラックホールに入ります。私が思っているのは、cronにジョブの出力を取得し、メールで送信するのではなく、どこかにキャッチオールログファイルに投げる方法はありますか? Ubuntuを使用しています(8.04ですが、9.04に移行しています)。これにはそのような解決策のヒントがあります ランダムなGoogleの結果 ですが、OPはcronの出力とcronのジョブの出力について混乱している可能性があります。

私はスクリプトやハッキングを少し含むソリューションに心を開いていますが、理想的にはこれがどこかに設定できる構成ビットになるでしょう。 man cronにヒントがありません。ありがとう!

23
Brad

cronie cron(Gentooハンドブックなどで推奨)の場合、cron呼び出しに「-s」引数があり、syslogを使用してジョブ出力をシステムログに送信します。

1
Tomáš Diviš

「メールが無効になっています」と言ったときの意味がわかりません。しかし、/etc/aliasesにパイプに向けられたエイリアスを設定することができますか?何かのようなもの

root: "|/bin/cat >> /var/log/cron.log"
3
innaM

簡単な答えは「いいえ」です。設計上、cronはcrontabの所有者にメールを送信します。標準のcronでは、これを変更する方法はありません。

私が考えることができる最良の方法は、この動作でユーザーのメールボックスではなくログファイルにメールをダンプするマシンでMTAを構成することです。

3
Kamil Kisiel

私があなたが求めていることがUbuntu(または他の)cronで実際に可能であるとは思いません。

Geekmonkeysのアイデアの他に、$ MAILTOをローカルアカウントに設定し、procmailを介して出力をルーティングすることもできます。

2
Adam

このようなcronの設定について聞いたことがないので、スクリプトのルートを使用します。

/ var/spool/cron/*をパトロールするcronジョブを作成し、それがないジョブにリダイレクトを追加します。

1
geekmonkey

「標準cron」とは何なのかわかりません。 cronデーモンはたくさんあり、ディストリビューションによって使用するデーモンは異なります。 Vixie cronが最も広く展開されているので、おそらくそれがあなたの意図したことです。しかし、いくつかのディストリビューションでは、それはデフォルトではありません。

Arch Linuxのデフォルトである Dillon's cron (dcron)の開発を引き継ぎました。他のディストリビューションでもこれを使用していますが、それが他のどこかでデフォルトかどうかはわかりません。 dcronには呼び出しオプション-Mは、sendmailの代わりにカスタムスクリプトを使用することを指定します。スクリプトは引数なしで呼び出され、いくつかの電子メールヘッダーと&> stdinとしてのcronjobsの出力。 (ない場合&>出力、スクリプトは呼び出されません。)

1
dubiousjim

もう1つのオプションは、cron_wrapperなどと呼ばれるシェルスクリプトを作成し、次のようにすることです。

#!/ bin/sh 
 
 eval "$ * >> /var/log/cronlog.log"
exit $?

次に、すべてのcrontabに次のようなものが必要です。

* * * * */usr/local/bin/cron_wrapper echo hello

このコードをテストしていないことに注意してください。これは単なるアイデアです。

1
Justin Ellison

特定のユーザーのcrontabにMAILTO = ""を設定しないでください。これにより、/ var/spool/mail /内のメールメッセージのロギングが無効になります。

1
lalit