shell 监控脚本 短信告警
时间:2010-10-19 来源:sun5411
监控+实时报警 自己使用bash shell 编写了一个监控脚本。通过139邮箱,发送邮件,短信及时通知。 功能描述:通过config.list文件获取各个服务器地址、相应端口、名称,循环检测各个应用的端口健康情况,当发现故障只发送一次告警信息,故障修复后发送一次通知信息(这个地方的逻辑判断有点小复杂,需要仔细阅读才能理解其中的思想)。最后加入crontab每分钟执行一次。
#echo `date +%Y%m%d-%T` WORK_DIR=/root/work/script cd $WORK_DIR ############# 初始化记录日志文件和状态文件 ################## if [ ! -e $WORK_DIR/Status.txt ];then
touch $WORK_DIR/Status.txt if [ ! -e $WORK_DIR/Alert.log ];then
touch $WORK_DIR/Alert.log ############# 定义处理函数 ##################
function check_svr
if [[ $STAT1 = "filtered" ]] || [[ $STAT1 = "closed" ]] ;then if [ `awk /$ADDRESSS.*$PORT\ / $WORK_DIR/Status.txt |wc -l` -eq 0 ];then sleep 10 STAT2=`nmap -P0 -n -p$PORT $ADDRESSS |grep tcp |awk '{print $2}'`
if [[ $STAT2 = "filtered" ]] || [[ $STAT2 = "closed" ]] ;then echo $ADDRESSS $PORT $STAT2 >> $WORK_DIR/Status.txt
echo $(hostname):$(date):$SVRNAME,$ADDRESSS:$PORT":故障" >> $WORK_DIR/Alert.log fi else if [ $STAT1 = "open" ];then if [ `awk /$ADDRESSS.*$PORT\ / $WORK_DIR/Status.txt |wc -l` -eq 1 ];then
echo $SVRNAME,$ADDRESSS:$PORT":恢复正常" | mutt -s twioo-$(hostname) [email protected] rm -rf $WORK_DIR/Status.txt && mv $WORK_DIR/tmp.txt $WORK_DIR/Status.txt echo $(hostname):$(date):$SVRNAME,$ADDRESSS:$PORT" 恢复正常" >> $WORK_DIR/Alert.log
fi fi } ############ 进入循环列表 检测没个服务器的健康情况 ############## LINES=`awk 'END{print NR}' configure.list` /* 获取总config.list文件的条目数*/
while (($i<=$LINES)) /* 进入循环检测*/
ADDRESSS=`sed -n "$i"p configure.list | awk -F" " '{print $1}'` /* 获取地址*/ PORT=`sed -n "$i"p configure.list | awk -F" " '{print $2}'` /* 获取端口*/ SVRNAME=`sed -n "$i"p configure.list | awk -F" " '{print $3}'` /* 获取服务名称*/ check_svr /* 直接调用 上面定义的函数*/
i=$(($i+1))
#echo `date +%Y%m%d-%T` [root@SvrTest script]# cat configure.list
加入crontab ,每分钟执行一次 [root@SvrTest script]#crontab -e */1 * * * * /root/work/script/NBmonirot 此脚本纯属个人爱所写,欢迎切磋交流,相互学习。 |