グァソのメモ書き

主に自分用メモ

Ubuntuサーバでdisk残量をチェックして警告メールを投げるシェルスクリプト

背景

先日、サーバのディスク残量が枯渇しているのに気付かず、
丸一日走らせてしまうという失態を犯して実に残念な気分になった。
こういった事態が二度と起こらないように、
ディスク容量を定期的にチェックして、利用率が閾値以上だった場合に
所定のメールアドレスに警告メールを送信するという
実に単純なスクリプトを書いた。

スクリプトの動作概要

dfで/にマウントされてるファイルシステムの情報取得。
sedで利用率を切り出す。
利用率と閾値の比較。
(利用率が閾値以上の場合)メールの成形、送信。

動作環境

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の設定は割愛。