硬盘监控脚本,大部分使用df形式然后awk 等方法把使用率格式化成数字去判断,但是发现当分区格式不一样的时候,有时候就会出错,现在的大部分linux主机都有安装nagios,不管是监控还是被监控,nagios上面都有很多我们可以用到的工具,可以用来检测我们的服务器情况。nagios只要安装客户端就可以了。很简单。
这里利用nagios的check_disk命令检测硬盘使用情况。
#!/bin/bash
ERROR=0 //分区是否超过指定大小的标识 0 正常 1 超过
MIX=30 //分区大小小于30%发送邮件
IP=`ifconfig | grep 'inet ' | grep -v '127.0.0.1' | awk -F ' ' '{print $2}'| awk -F':' '{print $2}'| head -n 1` //获取IP
echo "disk free space:">/root/sh/disk.log
df -h >>/root/sh/disk.log //获取分区情况,这个比较直观 邮件正文体现
for i in `/usr/local/nrpe/libexec/check_disk -l -m | awk 'BEGIN{RS = "% inode"} {print}' | cut -d'(' -f 2 | grep -Ev "^$|#|=" ` //获取各个分区的剩余空间百分比
do
if [ "$MIX" -gt "$i" ];then //比较大小
ERROR=1
fi
done
#DISK
for k in `ls / | grep -E "bin|home|sbin|usr|www|etc|mnt|opt|tmp|var"` //测试硬盘读写
do
echo "ok">/"$k"/likunshan.test
if [ "$?" != 0 ];then
ERROR=1
echo "/"$k"___write____________error!!!!!!!!" >>/root/sh/disk.log
else
echo "/"$k"/__write_ok" >>/root/sh/disk.log
fi
cat /$k/likunshan.test >/dev/null
if [ "$?" != 0 ];then
ERROR=1
echo "/"$k"/____read____________error!!!!!!!!" >>/root/sh/disk.log
else
echo "/"$k"/___read_ok" >>/root/sh/disk.log
fi
done
if [ "$ERROR" == 1 ];then
mutt -s "$IP _disk_check" 281450202@qq.com </root/sh/disk.log
fi