两个节省时间的运维脚本

网友投稿 818 2022-10-03

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

两个节省时间的运维脚本

分享两个批处理脚本,一个是shell脚本,另一个也是shell脚本!

1、批量收集服务器远程管理卡信息

用前需知:

已安装ipmitool工具知道远程管理卡的账号密码不同厂商的服务器和同一厂商不同型号服务器的信息收集命令会有差异,这里主要看原理

#!/bin/bash#VERSION=0.0.1#MODIFY_DATE=20190106function getSN() { sn=""# sn=`ipmitool -I lanplus -H $IP_ADDR -U $USER_NAME -P $PASSWD fru | grep "Product Serial" | head -n 1 | awk -F " : " '{print $2}'` sn="sn-01" if [ $? -ne 0 ] then echo "SN:$sn get bmc fw error" return 1 fi}function machine_version() { mctype="" # get machine type #mctype=`ipmitool -I lanplus -H $IP_ADDR -U $USER_NAME -P $PASSWD fru | grep "Board Part Number" | awk -F " : " '{print $2}' ` mctype="SA5112M5" if [ $? -ne 0 ] then echo "ip:$IP_ADDR get bios fw error" return 1 fi #bmcfw=`ipmitool -I lanplus -H $IP_ADDR -U $USER_NAME -P $PASSWD mc info | grep "Firmware Revision" | awk -F " : " '{print $2}' ` bmc_version="4.02" if [ $? -ne 0 ] then echo "ip:$IP_ADDR get bios fw error" return 1 fi}function printHelp(){ echo "Usage:./dumpConfigInfo -i ipFile ipFile is bmc machine info file include ip username and passwordall info output file dump.csv"} case $1 in -h|--help) printHelp exit 0 ;; esac while getopts ":i:" opt do case $opt in i) IP_FILE=$OPTARG echo "ip file is "$IP_FILE ;; *) echo "argument error" exit 1;; esac done echo $IP_FILE if [ ${#IP_FILE} -eq 0 ] then echo "please assign ip file. detail info check -h" exit 0 fi echo "ip,sn,machine_type,bmc_version" > dump.csvfor LINE in `cat ip.csv`;do{ if [ ${#LINE} -lt 20 ] then continue; fi BOUND="" SHARELINK="" IP_ADDR=`echo $LINE | awk -F, '{print $1}'` USER_NAME=`echo $LINE | awk -F, '{print $2}'` PASSWD=`echo $LINE | awk -F, '{print $3}' | sed 's/\r//g'` if [ $? -eq 1 ] then echo "$IP_ADDR not available" >>dump.csv continue fi #get sn number getSN machine_version echo "$IP_ADDR,$sn,$mctype" >> dump.csv echo "$IP_ADDR dump info over"}&done

key points:

1、 while getopts ":i:" opt

2、for LINE in `cat ip.csv`;

3、逗号分隔值(Comma-Separated Values,CSV),和shell完美匹配

【2】检测网段内存活ip

#!/bin/bashcmd="ping -W 2 -c 2" #定义命令read -p '输入 ip 的前24位,例如192.168.15:' ip#ip="10.23.68." #定义ip前半部分for i in $(seq 254)do{#echo $ip$i $cmd $ip.$i &>/dev/null #执行ping命令if [ $? -eq 0 ]; then echo "$ip.$i is alive"else echo "$ip.$i is dead"fi}& #采用shell的批量ping doneexit 0

以上代码节省时间的原理就是通过&这个伟大的符号提高并发,如通过ipmitool命令获取一个服务器的设备型号的时间是15S,使用了&符号之后可多条命令并行执行,有效减少执行等待时间,避免面对200台机器的时的尴尬。

time ipmitool -I lanplus -H X.X.X.X -U *** -P *** fru | grep "Board Part Number" Board Part Number : SA5212M5real 0m15.081suser 0m0.009ssys 0m0.006s

ping发送2个数据包,执行时间是1S左右,但是如果是200个ip就需要200S,时间等待也是比较长的,使用&符号之后10S之内轻松搞定【20倍】

[root@ansible-db /opt/script]# time ping 127.0.0.1 -c 2PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.016 ms64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.021 ms--- 127.0.0.1 ping statistics ---2 packets transmitted, 2 received, 0% packet loss, time 999msrtt min/avg/max/mdev = 0.016/0.018/0.021/0.005 msreal 0m1.001suser 0m0.000ssys  0m0.001s

以上可一举反三,换汤不换药!

上一篇:【干货】28例运维经典面试题,速收!
下一篇:公有云评测及那些坑 | 运维讲坛沙龙活动@上海
相关文章

 发表评论

暂时没有评论,来抢沙发吧~