文档章节

H3C和Cisco的无线设备自动监测和重启

运维技术
 运维技术
发布于 2015/11/05 18:27
字数 1533
阅读 535
收藏 4

背景:    前一段时间公司的购置了一批企业级的无线AP,由于使用人数太多,运行一段时间后发现,无线还是经常掉线或者无法连上网络(有线不会出现这样的问题),这时候我们会对无线设备进行重启,重启之后设备恢复正常,无线网络也恢复ok,由此萌生想用自动化的方式对无线设备进行监控和自动定期对无线设备重启来保持无线网络的稳定。

          

无线设备型号H3C WA2620i-AGN 和 Cisco Aironet 1240AG 

目的:  1.自动监测无线设备的运行情况,当监测到无线设备不能连接到外网或者延迟很高时,重启无线设备。

          2.每天中午12:30和下午18:30 定期对无线设备进行重启

思路:   核心就是模拟手工登陆无线设备,运行相关无线设备的命令,去判断无线设备的运行情况,来实现自动监测和重启,核心方式使用shell的expect函数,为什么使用shell,而不使用其他语言比如python,是因为它能快速的完成这个功能。

上图-> 自动重启无线设备图(H3C和Cisco

上图-> 自动监测无线设备图(H3C和Cisco )-->丢包正常图(模拟登陆无线设备ping外网地址,延迟正常则无需重启等动作)

Cisco

H3C


上图-> 自动监测无线设备图(H3C和Cisco )-->丢包不正常图(模拟登陆无线设备ping外网地址,延迟不正常则需重启)

Cisco


H3C

代码如下:

#!/bin/bash
#author: GaoMing
#date: 2015-11-02
#qq: 530035210
#blog: http://my.oschina.net/pwd/blog 
# 无线设备定期重启和自动监测
 
logdir=/data/log/shell          #日志路径
log=$logdir/log.log            #日志文件 
is_font=1                #终端是否打印日志: 1打印 0不打印 
is_log=1                 #是否记录日志: 1记录 0不记录
pingDes="223.5.5.5"
#pingDes="8.8.8.8"

datef(){
date "+%Y-%m-%d %H:%M:%S"
}
  
print_log(){
if [[ $is_log -eq 1  ]];then
[[ -d $logdir ]] || mkdir -p $logdir
echo "[ $(datef) ] $1" >> $log
fi
if [[ $is_font -eq 1  ]];then
echo -e "[ $(datef) ] $1"
fi
}

#H3C无线自动执行命令
#$1:无线IP,$2:无线账号,$3:无线密码,$4:要执行的命令 
runH3C()
{
         expect -c "
                spawn /usr/bin/telnet  $1  23
                set timeout -1
                expect \"\*Username\*:\"
                send \"$2\r\"
		expect \"\*Password\*:\"
                send \"$3\r\"
                expect \"\*\>\"
                send \"$4 \r\"
                expect \"\*\>\"
                send \"quit\r\"
                expect eof 
                  "
}

#H3c无线重启
runH3cReboot()
{
         expect -c "
                spawn /usr/bin/telnet  $1  23
                set timeout -1
                expect \"\*Username\*:\"
                send \"$2\r\"
                expect \"\*Password\*:\"
                send \"$3\r\"
                expect \"\*\>\"
                send \"$4 \r\"
                expect \"\*\:\"
                send \"Y\r\"
                expect eof 
                  "

}


#Cisco无线自动执行命令
#$1:无线IP,$2:无线账号,$3:无线密码,$4:要执行的命令
runCisco()
{
         expect -c "
                spawn /usr/bin/telnet  $1  23
                set timeout -1
                expect \"\*Username\*:\"
                send \"$2\r\"
                expect \"\*Password\*:\"
                send \"$3\r\"
                expect \"\*\#\"
                send \"$4 \r\"
                expect \"\*\#\"
                send \"quit\r\"
                expect eof 
                  "
}

#Cisco无线重启
runCiscoReload()
{
         expect -c "
                spawn /usr/bin/telnet  $1  23
                set timeout -1
                expect \"\*Username\*:\"
                send \"$2\r\"
                expect \"\*Password\*:\"
                send \"$3\r\"
                expect \"\*\#\"
                send \"$4 \r\"
                expect \"\*\]\"
                send \"\r\"
                expect eof 
                  "
}

#整合H3C和Cisco无线自动执行
#$1:无线设备类型 $2:无线IP,$3:无线账号,$4:无线密码,$5:要执行的命令
runWirelessAction()
{
print_log "\t-----Start-----"
int=1
while (( $int <= $# ))
do

eval i=\$$int
if [[ $i == ""    ]];then
print_log "$FUNCNAME():参数(第$int个)为空,退出."
exit
fi

let "int++"
done

print_log "$FUNCNAME():检测IP($3)($2)是否存在..."
pingIP=$(ping -c 3 $3  |grep "3 received" |wc -l)
if [[ $pingIP -eq 0  ]];then
print_log "$FUNCNAME():$3无线的IP不存在或者宕机了,退出当前函数."
return
else
print_log "$FUNCNAME():检测IP完成."
fi

case $1 in
"restart")
    case $2 in
        "cisco")
        	print_log "$FUNCNAME():开始重启无线思科设备..."
        	reloadStr=$(runCiscoReload "$3" "$4" "$5" "$6")
        	reloadStrResult=$(echo "$reloadStr"|grep "closed" |wc -l)
        	if [[ $reloadStrResult -eq 1  ]];then
        		print_log "$FUNCNAME(): IP为:$3的无线设备正在重启..."
        		print_log "$FUNCNAME(): 设备返回的信息如下:\n\r$reloadStr"
        	else
        		print_log "$FUNCNAME(): IP为:$3的无线设备重启异常 \n\r return code:$reloadStrResult \n\r return Str:$reloadStr"
        	fi
        	print_log "$FUNCNAME():重启无线思科设备完成"
        ;;
        "h3c")
                print_log "$FUNCNAME():开始重启无线H3c设备..."
        	runH3cReboot  "$3" "$4" "$5" "$6" > /tmp/rebootStr.txt &
        	sleep 5
        	rebootStr=$(cat /tmp/rebootStr.txt)
                rebootStrResult=$(cat /tmp/rebootStr.txt|grep "Continue" |wc -l)
                if [[ $rebootStrResult -eq 1  ]];then
                        print_log "$FUNCNAME(): IP为:$3的无线设备正在重启..."
                        print_log "$FUNCNAME(): 设备返回的信息如下:\n\r$rebootStr"
                else
                        print_log "$FUNCNAME(): IP为:$3的无线设备重启异常 \n\r return code:$rebootStrResult \n\r return Str:$rebootStr"
                fi
                print_log "$FUNCNAME():重启无线H3c设备完成"
        ;;
        *)
        print_log "$FUNCNAME():暂不支持其他设备."
        ;;
    esac

;;
"run")
	case $2 in
	   "cisco")
		print_log "$FUNCNAME():开始操作无线思科设备($3)..."
	        print_log "$FUNCNAME():开始在该设备执行命令($6)..."
        	runReStr=$(runCisco "$3" "$4" "$5" "$6")
		returnPercent=$(echo $runReStr |grep "percent" |awk -F'percent' '{print $1}' |awk '{ print $NF}')
		print_log "$FUNCNAME():设备返回的信息如下:\n\r $runReStr"
		print_log "$FUNCNAME():ping包返回的成功百分比(5个包): $returnPercent%"
		if [[ $returnPercent -lt 50  ]];then
			print_log "$FUNCNAME():该无线设备的丢包率大于50%,开始重启该设备."
			runWirelessAction "restart" "cisco" "$3" "$4" "$5" "reload"
		fi 
        	print_log "$FUNCNAME():执行命令完成"
		;;
	   "h3c")
		print_log "$FUNCNAME():开始操作H3c设备($3)..."
	        print_log "$FUNCNAME():开始在该设备执行命令($6)..."
        	runReStr=$(runH3C "$3" "$4" "$5" "$6")
		returnPercent=$(echo "$runReStr" |grep "loss" |awk -F'.' '{print $1}')
		print_log "$FUNCNAME():ping包的丢包率(5个包):$returnPercent%"
		print_log "$FUNCNAME():设备返回的信息如下:\n\r $runReStr"
		if [[ $returnPercent -gt 50  ]];then
			print_log "$FUNCNAME():该无线设备的丢包率大于50%,开始重启该设备."
			runWirelessAction "restart" "h3c" "$3" "$4" "$5" "reboot"
		fi 
        	print_log "$FUNCNAME():执行命令完成"

		;;
	esac
;;
*)
	print_log "$FUNCNAME():暂不支持其他类型无线AP或参数."
;;
esac
}
#自动监测和重启
#runWirelessAction "run" "cisco" "10.2.1.111" "admin" "password" "ping $pingDes"
#runWirelessAction "run" "h3c" "10.2.1.112" "admin" "password" "ping $pingDes"
#重启
#runWirelessAction "restart" "cisco" "10.2.1.111" "admin" "password" "reload"
#runWirelessAction "restart" "h3c" "10.2.1.111" "admin" "password" "reboot"

   自动监测和定期重启直接加入crontab即可使用


© 著作权归作者所有

共有 人打赏支持
运维技术
粉丝 103
博文 105
码字总数 110191
作品 1
广州
部门经理
私信 提问
经典案例:H3C校园网双出口配置

博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 一、案例分析 本案例以某高校的校园网出口为例,来展示NAT及策略...

Mr大表哥
06/28
0
0
网络备份工具--netbackup-tool

使用php做得一个用于备份h3c和cisco网络设备的配置的工具。简介: 本程序包括二个主要的备份程序h3c.php和cisco.php。 h3c.exe程序模拟ftp客户端将csv配置文件中列出的h3c.设备中的配置文件下...

匿名
2010/03/08
1K
0
H3C S7500E系列高端多业务路由交换机

H3C S7500E系列高端多业务路由交换机 H3C S7500E系列产品是杭州华三通信技术有限公司(以下简称H3C公司)面向融合业务网络的高端多业务路由交换机,该产品基于H3C自主知识产权的Comware V5/...

yuanwx0328
2017/11/23
0
0
[信息图表]关于物的互联网

2008 年,连接到互联网的设备已经超过了人类的数量。随着移动互联网的发展,与互联网相连的物品数量更是急速上涨,Cisco 的一副信息图展示了与互联网关联的物品之增长。 到 2020 年,连接到互...

老枪
2011/07/18
832
9
交换机配置备份脚本

一、脚本介绍 1.本文的自动配置备份脚本是通过BAT脚本自动运行CRT-登录交换机-查看当前配置-记录会话-保存会话的方式实现的。 2.本方法需要把以下4个文件要放置在同一目录下: (1)配置备份....

飞奔的鱼儿
2017/09/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx+php-fpm配置后页面显示空白的解决方法以及用nginx和php-fpm解决“502 Bad Gateway”问题

https://stackoverflow.com/questions/15423500/nginx-showing-blank-php-pages For reference, I am attaching my location block for catching files with the .php extension: location ~......

Yao--靠自己
15分钟前
1
0
mac 没声音

somehow不时就会出现这种情况。之前都得重启。 其实可以直接在terminal里打以下命令: sudo kextunload /System/Library/Extensions/AppleHDA.kext sudo kextload /System/Library/Extension...

dubox
31分钟前
1
0
看完让你彻底搞懂Websocket原理

作者:Ovear 链接:https://www.zhihu.com/question/20215561/answer/40316953 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 额。。最高票答案没答到点...

时刻在奔跑
45分钟前
2
0
Spring Cloud Stream消费失败后的处理策略(一):自动重试

之前写了几篇关于Spring Cloud Stream使用中的常见问题,比如: 如何处理消息重复消费 如何消费自己生产的消息 下面几天就集中来详细聊聊,当消息消费失败之后该如何处理的几种方式。不过不论...

程序猿DD
47分钟前
0
0
《Maven官方文档》-Maven依赖机制简介

《Maven官方文档》-Maven依赖机制简介 原文地址 译者:Tyrian 依赖机制是Maven最为用户熟知的特性之一,同时也是Maven所擅长的领域之一。单个项目的依赖管理并不难, 但是当你面对包含数百个...

tantexian
56分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部