shell-脚本集合2
shell-脚本集合2
2012年01月16日
版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。
shell-脚本集合 shell-脚本集合2
21 监控之检查磁盘 $ cat chk_df.sh
#!/bin/bash
#
#check the disk usage via ssh
#variables
let dflimit=90
crondir="crontab"
source CONFIG
#main
#执行ssh 命令
for HOST in $ALLHOSTS ;do
flag_disk_file=$crondir/log/"$HOST".disk
log=$crondir/log/disk_error.log
capacity=$(ssh root@$HOST "df" | grep "/dev/" | sed 's/\%//' | awk '{print $5}')
let flags=0
#判断ssh命令返回结果
for used in $capacity ;do
if [ $used -ge $dflimit ];then
let flags=1
break
fi
done
#如果磁盘超过限制,则发送报警邮件
if [ "$flags" -eq "1" -a ! -f "$flag_disk_file" ];then
#for mobile in "$MOBILES";do
#echo "$HOST disk will full" | /usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode
#done
echo "$HOST disk will full" | mail -s "$HOST disk will full" $MAILS
date +'%F %T' >>$log
echo "$HOST disk will full" >> $log
echo "disk_error" >$flag_disk_file
fi
#如果磁盘正常,则发邮件解除报警邮件
if [ "$flags" -eq "0" -a -f "$flag_disk_file" ];then
for mobile in "$MOBILES";do
echo "$HOST disk ok"|/usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode
done
echo "$HOST disk ok" | mail -s "$HOST disk ok" $MAILS
date +'%F %T' >>$log
echo "$HOST disk ok" >> $log
rm -f $flag_disk_file
fi done
22 监控之检查系统负载 $ cat chk_load.sh
#!/bin/bash
#
#check the system load through ssh
#variables
let loadlimit=3
sh_dir=/root/sh/
crondir=${sh_dir}crontab
log=${crondir}/log/system_load.log
source ${sh_dir}/CONFIG
#main
#执行ssh 命令
for HOST in $ALLHOSTS ;do
LOAD=$(ssh root@$HOST "/bin/cat /proc/loadavg" | awk '{print $1}' | awk -F. '{print $1}')
if [ -z "$LOAD" ];then
echo "$HOST is null"
continue
fi
#判断ssh命令返回结果
if [ "$LOAD" -lt "$loadlimit" ];then
#echo "$HOST load is OK!"
#如果找到load文件,则发送解除报警邮件
if [ -f $crondir/log/"$HOST".load ];then
#for mobile in $MOBILES;do
# echo "$HOST load ok"|/usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode
#done
echo "$HOST load ok" | mail -s "$HOST load ok" $MAILS
#删除load文件
rm -f $crondir/log/"$HOST".load
date +'%F %T' >>$log
echo "$HOST load ok" >> $log
fi
else
#echo "$HOST is overload!"
#不能找到load文件,则发送报警邮件
if [ ! -f $crondir/log/"$HOST".load ];then
#for mobile in $MOBILES;do
# echo ""$HOST" overload"|/usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode
#done
echo "$HOST overload" | mail -s "$HOST overload" $MAILS
#生成load文件
echo "overload" >$crondir/log/"$HOST".load
date +'%F %T' >>$log
echo "$HOST overload" >> $log
fi
fi done
26 监控之检查网络(ping) $ cat chk_ping.sh
#!/bin/bash
#
#Use the ping command to check network
#
#$ ping -f -c 10 10.0.100.1
#PING 10.0.100.1 (10.0.100.1) 56(84) bytes of data.
#.........E
#--- 10.0.100.1 ping statistics ---
#10 packets transmitted, 0 received, +3 errors, 100% packet loss, time 120ms
#, pipe 3
#$ ping -f -c 10 10.0.100.71
#PING 10.0.100.71 (10.0.100.71) 56(84) bytes of data.
#
#--- 10.0.100.71 ping statistics ---
#10 packets transmitted, 10 received, 0% packet loss, time 0ms
#rtt min/avg/max/mdev = 0.003/0.009/0.056/0.015 ms, ipg/ewma 0.029/0.019 ms
#
#$ echo $?
#1 #返回值1
#
#variables
sh_dir=/root/sh/
crondir=${sh_dir}crontab
source ${sh_dir}/CONFIG
DELAY_LIMIT=100
LOSS_LIMIT=20
HOSTS="$ALLHOSTS $WEBHOSTS" #main
#每个ip
for HOST in $HOSTS ;do
flag_ping_file="$crondir/log/$HOST.ping"
flag_ping_fatal="$crondir/log/$HOST.ping.fatal"
error_log="$crondir/log/ping_error.log"
#返回值0,定义delay 与 loss 变量
if ping -f -c 50 $HOST >$crondir/log/ping.log;then
grep "rtt min" $crondir/log/ping.log >$crondir/log/ping.delay
grep "packet loss" $crondir/log/ping.log >$crondir/log/ping.loss
delay=`awk -F= '{print $2}' $crondir/log/ping.delay | awk -F/ '{print $2}'| awk -F. '{print $1}'`
loss=`awk '{print $6}' $crondir/log/ping.loss | awk -F% '{print $1}'`
#判断delay 或者loss 大于规定限制,则发送报警邮件
if [ "$delay" -ge "$DELAY_LIMIT" -o "$loss" -ge "$LOSS_LIMIT" ];then
if [ ! -f $flag_ping_file ];then
#for mobile in $MOBILES;do
#echo "Monitor to $HOST delay $delay'ms;$loss% packet loss" | /usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode
#done
echo "Monitor to $HOST delay $delay'ms;$loss% packet loss" | mail -s "Monitor to $HOST delay $delay'ms;$loss% packet loss" $MAILS
date +'%F %T' >>$error_log
cat $crondir/log/ping.log >>$error_log
#生成用于判断的flag文件
echo "$HOST network error" >$flag_ping_file
fi
fi
#判断delay 或者loss 小于规定限制,则发送解除报警邮件
if [ "$delay" -lt "$DELAY_LIMIT" -a "$loss" -lt "$LOSS_LIMIT" -a -f $flag_ping_file ];then
echo "$HOST network ok" | mail -s "$HOST network ok" $MAILS
rm -f $flag_ping_file
if [ -f $flag_ping_fatal ];then
#for mobile in $MOBILES;do
#echo "$HOST network ok"|/usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode
#done
#删除用于判断的flag文件
rm -f $flag_ping_fatal
fi
fi # else
#返回值1,则直接判断为失败,发送报警邮件
if [ ! -f $flag_ping_fatal ];then
#for mobile in $MOBILES;do
#echo "Monitor to $HOST fatal;100% packet loss" | /usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode
#done
echo "Monitor to $HOST fatal;100% packet loss" | mail -s "Monitor to $HOST fatal;100% packet loss" $MAILS
date +'%F %T' >>$error_log
cat $crondir/log/ping.log >>$error_log
echo "$HOST network fatal" >$flag_ping_fatal
echo "$HOST network error" >$flag_ping_file
fi fi done
27 监控之检查mysql 主从状态 $ cat chk_mysql_replicate.sh
#!/bin/bash
#
#check the mysql replicate
#
#/usr/local/mysql/bin/mysql -uroot -pdongnan -e 'show slave status\G' -ss | awk '{print $2}' | head -n 13 | tail -n2
#Yes #Yes # #
#variables
let dflimit=90
sh_dir=/root/sh/
crondir=${sh_dir}crontab
source ${sh_dir}/CONFIG
HOSTS="$DB_SLAVE_HOSTS" #main
for HOST in $HOSTS;do
ssh root@$HOST "/usr/local/mysql/bin/mysql -uroot -pdongnan -e 'show slave status\G' -ss" | awk '{print $2}' | head -n 13 | tail -n2 >"${crondir}/log/chk_mysql_replicate.log"
YN="" #
while read line;do
YN="$YN $line"
#doneerror" | /usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode
#done
echo "$HOST replicate error" | mail -s "$HOST replicate error" $MAILS
echo "replicate error" >"${crondir}/log/$HOST.mysql"
fi
fi
#
done
本文出自“dongnan” 博客,转载请与作者联系!
猜你喜欢
转载自ftn119bp.iteye.com/blog/1359423
今日推荐
周排行