Chinaunix
标题:
求更简单的方法重写这个磁盘空间检测的脚本吗?
[打印本页]
作者:
ccjsj2008
时间:
2009-12-02 16:25
标题:
求更简单的方法重写这个磁盘空间检测的脚本吗?
公司原来的脚本是针对以下这种分区形式的:
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 132G 75G 51G 60% /
/dev/sda1 1012M 41M 920M 5% /boot
/dev/sdc1 1.8T 261G 1.4T 16% /data
none 1014M 0 1014M 0% /dev/shm
/dev/sdb1 269G 200G 56G 79% /opt
查出如果某一分区的使用情况达85%以上,就发送短信和邮件报警,当时的脚本使用awk取 $1 $5就可以了
但是现在因为使用的LVM,所以出现以下的分区形式:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
273G 199G 61G 77% /
/dev/sda1 99M 13M 81M 14% /boot
none 2.0G 0 2.0G 0% /dev/shm
这样一来,就产生了问题,可以看到/dev/mapper/VolGroup00-LogVol00是自己一行,而下面的那一行,是以空除去Filesystem列以外的其他几列,用awk 取$1 和$5就不能得到正确的结果,所以花了点时间改了一下,但是还是不是很理想,看看哪位大侠能改的更简单一些。
#!/bin/sh
ADMINDIR=/Script_new/
smtpemailfrom="[email=abc@abc.com]abc@abc.com[/email]"
smtpserver="*.*.*.*"
smtplogin=user
smtppass123456"
emailto="[email=it@abc.com]it@abc.com[/email]"
while read ip port
do
{
echo $ip
ssh -f -p ${port} ${ip} df -h|grep /|tr -s "\n" " "| sed 's/ /\n/g' > /Script_new/Partion_Check/${ip}.txt
b=0
a=""
while read line ; do
a=$a" "$line ;
let b=$b+1;
if [ $((b%6)) -eq 0 ]; then
echo $a >> /Script_new/Partion_Check/${ip}_1.txt
a=""
let b=0
fi
done < /Script_new/Partion_Check/${ip}.txt
cat /Script_new/Partion_Check/${ip}_1.txt | awk '{print $1 "--" $5}' > /Script_new/Partion_Check/${ip}.txt
rm -f /Script_new/Partion_Check/${ip}_1.txt
partions=`cat /Script_new/Partion_Check/${ip}.txt`
for partion in ${partions}
do
{
usage=`echo ${partion} | awk -F '--' '{print $2}'`
name=`echo ${partion}/ | awk -F '--' '{print $1}'`
usagevalue=`echo ${usage} | awk -F '%' '{print $1}'`
echo $name $usagevalue
if [ ${usagevalue} -gt 80 ]
then
{
#send sms
c
/Script_new/Partion_Check/SMS.sh ${content}
#send mail ---
subject="`echo ${ip}` Partion Usage Alert !!!"
body=`echo ${content}`
echo "From: [url=file://\\]\\"XXXX[/url] IT Support\\" <${smtpemailfrom}>" > /tmp/Partion_Check
echo "To: ${emailto}" >> /tmp/Partion_Check
echo "Subject: ${subject}" >> /tmp/Partion_Check
echo "" >> /tmp/Partion_Check
echo "" >> /tmp/Partion_Check
echo " ${body}" >> /tmp/Partion_Check
#cat /tmp/Partion_Check
${ADMINDIR}/nbsmtp -f ${smtpemailfrom} -h ${smtpserver} -U ${smtplogin} -P ${smtppass} -M {l,p} < /tmp/Partion_Check 2>/tmp/Partion_Check_Alert.log
rm /tmp/Partion_Check
# send mail ---
echo ${content} >> /Script_new/Partion_Check/Check_Log.txt
}
else
{
c
echo `date` ${content} >> /Script_new/Partion_Check/Check_Log.txt
}
fi
echo Read Next Partion
}
done
echo Read Next Server
}
echo Read Nest List
done
复制代码
另 变量IP 和PORT是读取自其他文件,文件格式为
IP PORT
1.2.3.4 22
[
本帖最后由 ccjsj2008 于 2009-12-2 16:37 编辑
]
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2