takafumi blog

日々の勉強メモ

Linux ディスク容量チェックのスクリプト

環境   CentOS6.5

先日突然サービスが止まってるといわれて調べたら、ディスクフル。
ディスク容量チェックは必須です。

#!/bin/sh

limit=80 # percent

#
# Const
#
script=$(basename $0 .sh)
host=$(hostname -s)
lock=/tmp/$script.lock

#
# Mail
#
mail_cmd=/bin/mail

from='hoge@mail.com'
to='fuga@mail.com'
subject="[$host] Disk Check Alert."

#
# Function
#
prepare () {
    output=$(mktemp /tmp/$script.XXXXXX)
    exec > $output 2>&1
}

send_mail () {
    if [ -s $output ] ; then
        cat $output | $mail_cmd -s "$subject" $to -- -f $from
    fi
}

over_limit(){
    df -Ph | awk 'FNR>=2{ sub("%", "", $5); if($5>limit){print $5} }' limit=$limit
    df -Pi | awk 'FNR>=2{ sub("%", "", $5); if($5>limit){print $5} }' limit=$limit
}

check() {
    if [ -n "$(over_limit)" ]; then
        df -h
        echo
        df -i
    fi
}

cleanup () {
    rm -f $output
}

#
# Main
#
main () {
    prepare
    check
    send_mail
    cleanup
}

(
    flock -n 200
    [ $? -ne 0 ] && exit
    main
) 200> $lock