Ubuntuサーバでdisk残量をチェックして警告メールを投げるシェルスクリプト
背景
先日、サーバのディスク残量が枯渇しているのに気付かず、
丸一日走らせてしまうという失態を犯して実に残念な気分になった。
こういった事態が二度と起こらないように、
ディスク容量を定期的にチェックして、利用率が閾値以上だった場合に
所定のメールアドレスに警告メールを送信するという
実に単純なスクリプトを書いた。
動作環境
HP ML110G7
Ubuntu Server 12.04 LTS
スクリプト
#!/bin/sh CAPACITY=`/bin/df / | /usr/bin/tail -1 | /bin/sed 's/^.* \([0-9]*\)%.*$/\1/'` if [ $CAPACITY -gt 80 ]; then cat << __EOF__ > /tmp/alertmail.txt From: hoge@huga.com To: foo@bar.com Subject: [ALERT] DISK CAPACITY SHORTAGE ========== ALERT ========== DISK CAPACITY IS INSUFFICIENT! __EOF__ df / >> /tmp/alertmail.txt /usr/sbin/sendmail -t < /tmp/alertmail.txt fi exit 0
そのままコピペをする前に
そのままコピペをする人なんて居ないと思うけど一応注意事項を書いておきます。
このスクリプトでは閾値を80%に設定しています。任意の数字に変更して下さい。
また、メールの送信元、宛先についても任意のアドレスを指定して下さい。
sedで何やってるかの概要
冒頭から任意の要素の繰り返し、
半角スペース、
\(0から9の数字の繰り返し\)%、
末尾まで任意の要素の繰り返し、
ってなる部分(要するに、パイプで渡したdf /の末尾1行)の
\(と\)で囲まれている部分(要するに、hoge%の数字の部分)を出力している。
cronを使って自動実行
このスクリプトに実行権限を与えてcron.hourlyにでも放り込んでおけば
1時間に1回、ディスク残量が閾値を超えていないかチェックしてくれる。
主に自分向けの注意事項
いつものシェルスクリプトのノリで*.shって名前にしてたんだけど、
run-partsコマンドで実行出来るファイル名制限に引っかかってた。
cron.hourlyの中身はrun-partsで実行するからファイル名にドットを使っていると実行されない。
その他
sendmailの設定は割愛。