PR

[Linux] ディスクの容量不足を警告するスクリプト~設置編~

これまで数年サーバーを運用していて、2度、容量不足に事前に気がつけなかったことがあった。

1度目はroot 宛メールが蓄積していき、いつの間にやらディスクを逼迫してしまっていたもの。2度目は取り消したはずのスクリプト(cron )が何故か活きていて、ディスク容量不足に陥り、データベースのバックアップスクリプトが正常完了しなかった状態になってようやく気がついた。

ちょっと間違えば起動できなくなったり、データが吹き飛ぶ事も考えられるから恐ろしい。

そこで、容量が不足した場合、電子メールで警告するようにしたい。どのような手段があるだろうか。

スポンサードリンク

ユーザ領域(クォータ)に関するものが多くヒットしてしまい、ディスク全体(特に「/」)に関するものが少なかったように感じた。そもそも、その辺を正しく弄るレベルな人には、朝飯前どころの話ではないからかもしれない。

ここでは「サーバーの空き容量を監視してアラートメールを送ってくれるシェルスクリプトを書いたよ | IDEA*IDEA」に記載されている以下のスクリプトを使わせてもらうことにする:

#!/bin/sh
DVAL=`/bin/df / | /usr/bin/tail -1 | /bin/sed 's/^.* \([0-9]*\)%.*$/\1/'`
if [ $DVAL -gt 80 ]; then
  echo "Disk usage alert: $DVAL %" | /usr/bin/mail -s "[WARNING][`hostname`] disk space alert" YOUR_EMAIL_ADDRESS
fi

設置

スクリプト設置

$ sudo vim ~/cron_disk_use_check.sh

として、上記スクリプトを記載する。

$ sudo chmod u+x cron_disk_use_check.sh

として、実行権限を設定する。

動作確認

設置が完了したら動作確認を行う。

$ sh cron_disk_use_check.sh                                           
cron_disk_use_check.sh: 4: cron_disk_use_check.sh: /bin/mail: not found

として実行したところ、エラーとなった。mail コマンドが無いらしいので、探す:

$ which mail
/usr/bin/mail

パスが違うらしいので、書き換える。同時にどうやっても警告が出る数値に一時的に設定を変更しておき、メールが飛んでくるか確認しておく。動作確認が問題なければcron に登録する。

cron に登録

$ sudo crontab -e

としてcron を開いて

0 10 * * * /bin/sh /home/casey/cron_disk_use_check.sh > /dev/null 2>&1

(ホントは参考文献にあるように sbin などに設置するのだろうけど)

※記事の都合上、ここでは「設置」を記載し、別ページに「仕組み」を記述する

参考文献

コメント