以前、無料の独自ドメインを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」と書くだけです。これでメール地獄から救われます。
皆さんも試してみてください。
- Original:https://minory.org/cron-email.html
- Source:Minory
- Author:管理者