サイトアイコン IT NEWS

cron実行時のメールを送信しないようにする2つの方法

cron-email

以前、無料の独自ドメインをcronを使ってMyDNS経由で更新する方法を紹介した記事の中で、一部誤りがありました。
この記事では詳しく説明していませんが、シェルスクリプトの中にメールを送信しないような記述(/dev/null)がありますが、これではcron実行時にメールが送信されてしまいます。
また、実際にcronタスクを実行する記述もありませんでしたので、当記事で解消していきたいと思います。

cron実行時にメールが送信されるとどうなる?

管理者として、普通は正常に処理が行われたかメールを取得する必要があると思いますが、著者のように1時間毎に実行するようなタスクがある場合には、1日に24通ものメール送信されてしまうため、受信トレイがいっぱいになってしまいます。
このため、本当に見たいメールが埋もれてしまうことがありました。
そこで、1時間毎に実行するcronメール送信せず、1日1回、週1回、月1回の実行時に送信されるメールはそのままにしています。

1. すべてのタスクのメールを送信しない

最初はcronで設定したすべてのタスクに対してメールを送信しない方法です。
デフォルトではrootユーザーに対してメール送信するよう設定されています。
crontabを編集モードで開いて、

vi crontab

送信先のユーザー名を削除します。

#変更前
MAILTO=root
#変更後
MAILTO=""

これで何を実行してもメール送信されません。
ちなみに、任意のメールアドレスに送信したい場合は、MAILTOにメールアドレスを入力します。

MAILTO="example@sampledomain.com"

次は、メール送信したくないタスクのみを指定する場合です。

2. 任意のタスクのみメールを送信しない

毎時間メールが送られてくるのはウザいが、上記の方法では、毎週実行しているもの、もしくは毎月実行しているものが正常に動作しているかわからなくなります。(忘れずログを確認しろって話になりますが…)
著者の場合は1時間毎に送信されるメールのみ無効化したいので、/etc/cron.d/0hourlyを編集します。

01 * * * * root run-parts /etc/cron.hourly 1> /dev/null

末尾に「 1> /dev/null」を追加することで、このタスクのみメール送信されなくなりますが、エラーメールだけは送信されます。

【おまけ】すべてのメールを送信しない

すべてのメールを送信しないようにするには以下のように追加します。

01 * * * * root run-parts /etc/cron.hourly >/dev/null 2>&1

末尾に「 >/dev/null 2>&1」と書くだけです。これでメール地獄から救われます。
皆さんも試してみてください。

モバイルバージョンを終了