监控端口是否开放,端口未开放关闭虚拟ip,端口开放启动虚拟IP

#!/bin/bash
#该脚本监控本机的一个端口,当端口异常时,停止lvs的本地ip直到恢复。该脚本依托于lvs.sh启动脚本
#目前只支持监控1个vip

#定义常用变量
#配置检查的ip以及端口
check_ip=127.0.0.1
port=8081
vip=10.0.0.52
#脚本目录
path=/web/lvs52.sh


#判断文件是否存在,不存在则退出
if [ ! -e $path ];then
echo "$path is not exist"
exit
fi
#检查nc命令是否存在,不存在提示退出
which nc >& /dev/null
if [ $? != 0 ];
then
echo "on nc command"
exit
fi

#判断虚拟ip状态,运行中返回0,停止返回1,其它返回2
vip_status(){
path=$1
#检查vip运行状态,通过lvs.sh脚本反馈结果判断
state=`/bin/bash $path status`
if [[ $state == 'LVS-DR Running.' ]];
then
echo "$vip is ok"
return 0
elif [[ $state == 'LVS-DR real server Stopped.' ]]
then
echo "$vip is stop"
return 1
else
echo "It is error"
return 2
fi
}

#检查ip、端口是否可达, 可达返回0,不可返回1
port_check(){
ip=$1
port=$2
`nc -v -z $ip $port >& /dev/null`
if [[ $? = "0" ]];then
echo "$ip的$port可以连通"
return 0
else
echo "$ip的$port未开放,error"
return 1
fi
}


#检查端口,如端口正常检查vip,端口异常,停止vip
while true;
do
port_check $check_ip $port
if [[ $? = "0" ]];then
vip_status $path
if [[ $? != 0 ]];then
/bin/sh $path start
fi
else
vip_status $path
if [[ $? == 0 ]];then
`/bin/bash $path stop`
fi
fi
sleep 3
done

原文地址:https://www.cnblogs.com/uestc2007/p/10735833.html