下のようにしてメールを送らない設定にすると困る時がある。
vi /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
#MAILTO=root
MAILTO=""
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
スクリプトをcronで実行して
/usr/local/bin/pekehoge.sh: line 135: iptables: コマンドが見つかりません
こんなエラーがメールで送られてくることがある。このエラーは、cronログには出てこない。自分で設定をしないとログに出てこない。
(logファイル全部の串刺し検索もしたけど見つからなかった。)
で、
上の/etc/crontabで、メール設定は有効にした状態でエラーをログに出したりエラーメールだけを送る方法。
エラーメールだけがほしい時、cronの設定の最後に
1> /dev/null
とする。標準出力を/dev/nullというゴミ箱に出力する(捨てる)という意味。
"1>"は標準出力、"2>"は標準エラー出力。1の場合は省略できるので
> /dev/null
とも書ける。
自分の設定はとりあえずこれにしておく。cronが見かけ上動いていても、スクリプトの一部のコマンドが機能していないときにメールがほしい。cronが動いているかどうかはcronログをみる。
同じように
1> /dev/null 2>&1 標準出力も標準エラー出力も捨てる
1>> /var/log/pekehoge.log 2>&1 標準出力も標準エラー出力もログファイルに書き出す
>> /var/log/pekehoge.log 標準出力はログファイルに書き出し、標準エラー出力はメールする
ログファイルに書き出すときのローテートの設定。
# vi /etc/logrotate.d/pekehoge
/var/log/pekehoge.log
{
monthly
rotate 24
compress
missingok
}
月ごとにローテートして、24世代保管、gzipで圧縮して、ログファイルが存在しなくてもエラーを出さずに処理を続行
0 件のコメント:
コメントを投稿