文档章节

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

运维技术
 运维技术
发布于 2015/11/05 18:27
字数 1533
阅读 523
收藏 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即可使用


© 著作权归作者所有

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

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

Mr大表哥
06/28
0
0
H3C S7500E系列高端多业务路由交换机

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

yuanwx0328
2017/11/23
0
0
网络备份工具--netbackup-tool

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

匿名
2010/03/08
1K
0
[信息图表]关于物的互联网

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

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

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

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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

docker中安装了RabbitMQ后无法访问其Web管理页面

在官网找了"$ docker run -d --hostname my-rabbit --name some-rabbit -p 8080:15672 rabbitmq:3-management"这条安装命令,在docker上安装了RabbitMQ,,结果输入http://localhost:8080并不......

钟然千落
29分钟前
0
0
spring-cloud | 分布式session共享

写在前面的话 各位小伙伴,你们有福了,这一节不仅教大家怎么实现分布式session的问题,还用kotlin开发,喜欢kotlin的小伙伴是不是很开心! 以前在写Android的时候,就对客户端请求有一定的认...

冯文议
48分钟前
0
0
c语言之内存分配笔记

先看一个数组: short array[5] = {1,2} // 这儿定义的一个int类型的数组,数组第1和第2个元素值是1和2.其余后面默认会给值为0; 或者 short array[] = {1,2};//这儿数组第1和第2个元素,数组...

DannyCoder
今天
4
0
Shell | linux安装包不用选择Y/N的方法

apt-get install -y packageOR echo "y" | sudo apt-get install package

云迹
今天
2
0
Hadoop的大数据生态圈

基于Hadoop的大数据的产品圈 大数据产品的一句话概括 Apache Hadoop: 是Apache开源组织的一个分布式计算开源框架,提供了一个分布式文件系统子项目(HDFS)和支持MapReduce分布式计算的软件架...

zimingforever
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部