今日も元気にテクニカル

技術情報書きたいけど本ブログに書きたくないからこんな名前になりました。

crontabで設定したタスク実行時に、メールを送信しないようにする。

crontab -e で30分に1回タスクを動かしてるんだが、30分に1回メールが飛んできてウザい!cronの設定でメールを飛ばさないようにしたい!と思い、/etc/crontabファイルを編集。

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
#MAILTO=root
MAILTO=""
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

cronは1分に1回設定ファイルを見ているらしいから、これでメール来なくなるよね…と思いきや引き続き来る。念のため service crond restart したけれどそれでも来る。こりゃおかしいと思いいろいろ調べると/etc/anacrontabというファイルがあり、そっちの設定を変更しなければいけない様子。

http://cyberam.dip.jp/linux_foundation/taskschedule/anacron_main.html

上記サイトの説明では、結局cronからanacronが呼ばれるので、anacronの設定ファイルを編集しないといけないみたい。

# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""

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を編集したところ、めでたくメールが来なくなりました…と言いたい所だけどまだ来る!なんで!?

実はcrontab -e で設定するのでした。

どうやらcronには2つの動かし方があるらしく。

1./etc/crontabに記載されている以下のディレクトリにスクリプトを設置し、時次、日次、週次、月次タスクとして動かす。この場合は/etc/crontabのMAILTOオプションが有効になる。

  • /etc/cron.hourly
  • /etc/cron.daily
  • /etc/cron.weekly
  • /etc/cron.monthly

2.crontab -eで設定ファイルを呼び出し、自分の好きな時間にcronを実行するようにする。この場合、スクリプトの標準出力がcrontabを設定したユーザーにメール送信される。そしてcrontab -eの設定ファイルは**/var/spool/cron/user**にある。なんと分かりにくい…。

ということで、以下のように標準出力をブラックホールに投げてやればメールは来なくなる。

UNIXの部屋 コマンド検索:crontab (*BSD/Linux)

# 標準出力のみメールしない場合
* * * * * command 1> /dev/null

# 標準エラーもメールしない場合
* * * * * command >/dev/null 2>&1