昨今、cron のログにかんする話がちょいちょいありますが、問題点をまとめると
といったところかとおもいます。
これにたいする一般的なソリューションとして、かずほさんの cronlog というのがあって、これは exit status をみて stdout/stderr の出力を /dev/null または任意のファイルにおくってメールをとばさせないというソリューションです。
cronlog は便利なのだけど、毎行設定するのだるいという問題があるので、設定が簡単なように cron に以下のようなパッチをあてるのはどうでしょうか。
[email protected]
FAIL_MAIL_ONLY=1
とか先頭にかいておくだけで、exit status 0 のときはメールおくらない仕様になって便利。
diff --git a/do_command.c b/do_command.c
index 18d097d..4834908 100644
--- a/do_command.c
+++ b/do_command.c
@@ -129,7 +129,7 @@ child_process(e, u)
int stdin_pipe[2];
FILE *tmpout;
register char *input_data;
- char *usernm, *mailto;
+ char *usernm, *mailto, *fail_mail_only;
int children = 0;
pid_t job_pid;
@@ -153,6 +153,7 @@ child_process(e, u)
*/
usernm = env_get("LOGNAME", e->envp);
mailto = env_get("MAILTO", e->envp);
+ fail_mail_only = env_get("FAIL_MAIL_ONLY", e->envp);
/* Check for arguments */
if (mailto) {
@@ -523,6 +524,8 @@ child_process(e, u)
getpid(), (long) pos))
if (pos == 0)
goto mail_finished;
+ if (fail_mail_only && *fail_mail_only && status == 0)
+ goto mail_finished;
// get name of recipient.
if (mailto == NULL)