定時実行プログラム CRON からのメール通知を無効化する

SERVER


CRON からの自動メール送信

Linux の多くには CRON という、定期的にコマンドを実行するためのスケジュール機能が用意されています。

これを利用することで、"/etc/"crontab" コマンドや、"/etc/cron.daily/", "/etc/cron.hourly", "/etc/cron.weekly", "/etc/cron.monthly/" ディレクトリー内のファイルを編集することによって、あらかじめ指定した時間にコマンドを自動実行させることができるようになっています。

そして、実行されたコマンドが出力した内容は、指定された宛先またはそのコマンドを実行したアカウント宛にメールで自動的に通知する仕組みが用意されているようなのですけど、頻繁に実行されるようにスケジューリングされていたりすると、それと同じだけ、通知メールも山ほど来てしまう場合があります。

 

メールの配信処理というのは思いのほかシステムに負荷をかけるもとになりますので、不要な通知であれば削減して、必要な通知は実行されるコマンドの中で明示的に送信するように設定するのが良いようにも思います。少量やたまにの実行ならば、そこまで考えなくても良いようなきもしますけど。

ともあれ、今回はその CRON から送信される自動実行を停止する方法について、記してみようと思います。

 

CRON からの自動メール送信を停止する

CRON からメールが自動送信されるように設定する箇所は、複数ある場合もあるようです。

crontab

まず、crontab コマンドによって、ユーザー毎にスケジュールを設定する箇所があります。

設定ファイル自体は "/var/spool/cron/" ディレクトリー内に格納されるみたいですけど、実際には、例えば CentOS 5.4 では次のようなコマンドを実行して編集することになります。

crontab -u USERNAME -e

このようにすることで、USERNAME で指定したアカウントの CRON 設定を行うことができます。

ここで、行の冒頭あたりに MAILTO="" という値を付加することで、自動実行されたコマンドの出力をメール送信しないようにすることができます。例えば、次のような感じです。

MAILTO=""

0,20,40 8-17 * * 1-5 /usr/lib/exec1

0 * * * 0,6 /usr/lib/exec2

これで、crontab で編集した全てのスケジュールから、実行内容の自動送信がされないようになりました。

なお、ここで特定のローカルアカウントを指定することで、その宛先へ通知を送信することもできるようになっているようです。複数指定する場合には、アカウント名をカンマで区切って指定すれば良いようです。また、そもそも MAILTO を指定しないことで、この CRON を管理しているアカウント宛に通知が送信されるようになります。

 

/etc/crontab

もうひとつ、Cent OS 5.4 では、"/etc/cron.daily/", "/etc/cron.hourly", "/etc/cron.weekly", "/etc/cron.monthly/" ディレクトリー内のファイルを編集することによっても、コマンドの定時実行をスケジュールすることができるようになっています。

注意したいのは、この機構でのメール送信設定については、"/etc/crontab" というファイル内で行う必要があるというところです。

そのため、ここでも次のようにして MAILTO="" によるメール送信機能の無効化を行う必要があります。

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

 

# run-parts

01 * * * * root run-parts /etc/cron.hourly

02 4 * * * root run-parts /etc/cron.daily

22 4 * * 0 root run-parts /etc/cron.weekly

42 4 1 * * root run-parts /etc/cron.monthly

CentOS 5.4 の場合は既定でこのような CRON 設定がされているようなので、ここの "MAILTO=root" のところを、以下のように書き換えます。

MAILTO=""

これで、"/etc/cron.daily/", "/etc/cron.hourly", "/etc/cron.weekly", "/etc/cron.monthly/" で編集した全てのスケジュールから、実行内容の自動送信がされないようになりました。

 

/etc/anacrontab

そのほかにも、Cent OS 5.4 では "/etc/anacrontab" というファイルが存在します。

これは anacorn というプログラムが使用する設定ファイルで、システムの停止などにより crond が動作していなかった場合に、その時に処理すべきだったタスクをシステム起動時に検出し、指定されたタイミングで実行するためのものなのだそうです。

SHELL=/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

 

1 65 cron.daily run-parts /etc/cron.daily

7 70 cron.weekly run-parts /etc/cron.weekly

30 75 cron.monthly run-parts /etc/cron.monthly

ここでも、メール通知を意味する設定箇所 "MAILTO" があるので、こちらについても次のように書き換えておくと良いでしょう。

MAILTO=""