脚本分享

## bonding.sh
#!/bin/bash
#

function printful(){
    echo -e "\033[1;32m$1\033[0m"
}

function printful_file(){
    FILE=$1
    cat $FILE | while read line;do
    printful "$line"
    done
}

function debian_bonding(){
    sudo apt-get install ipcalc -y &> /dev/null && printful "installed ipcalc"|| printful "cannot install ipcalc netmask will be none"
    IN_IP=$(host `hostname -f`|awk ‘{print $NF}‘)
    #IP_PREFIX=$(hostname -I|awk -F ‘.‘ ‘{print $1"."$2"."$3}‘)

    printful "now bonding....."
    sudo cp /etc/network/interfaces /etc/network/interfaces.`date +%Y-%m-%d-%H:%M:%S`.bak
    eths=(eth0 eth1 eth2 eth3 eth4 eth5 eth6)
    eths_10000=()
    eths_1000=()
    for nic in ${eths[@]};do
        sudo /sbin/ethtool $nic 2> /dev/null | grep  10000base &> /dev/null && eths_10000=(${eths_10000[@]} $nic)
        sudo /sbin/ethtool $nic 2> /dev/null | grep  1000base &> /dev/null && eths_1000=(${eths_1000[@]} $nic)
    done
    printful "10000 bonding  ${eths_10000[*]}...."
    # change the original interfaces file.
    printful "eths_10000:${eths_10000[*]}\neths_1000: ${eths_1000[*]}"
    AA=‘‘
    used_eths=$(/sbin/ip a|grep $IN_IP|awk ‘{print $NF}‘)
    [ ${#eths_1000[@]} -ge  2 -a ${#eths_1000[@]} -lt 2 ]  && { AA=(${eths_1000[0]} ${eths_1000[1]});printful "1000 bonding  ${eths_1000[*]}...."; }
    [ ${#eths_10000[@]} -ge  2 ] && { AA=(${eths_10000[0]} ${eths_10000[1]});printful "10000 bonding  ${eths_10000[*]}...."; }
    [ "$used_eths" == ‘‘ ] && printful ‘cannot get used eth nic...‘ && exit 2
    NETMASK=$(ipcalc `/sbin/ip addr show ${AA[0]} | awk ‘NR==3{print $2}‘`|grep Netmask|awk ‘{print $2}‘)
    [ $? != 0 ] && printful ‘bad netmask! please check...‘ &&exit 1
    [ -z "$NETMASK"  ] && NETMASK=$(ipcalc `/sbin/ip addr show ${AA[1]} | awk ‘NR==3{print $2}‘` | awk ‘/Netmask/{print $2}‘)
    [ -z $NETMASK ] && exit 1
    IP_PREFIX=$(ipcalc `/sbin/ip addr show ${used_eths} | awk ‘NR==3{print $2}‘`|grep HostMin|awk ‘{print $2}‘)

   cat << EOF |sudo tee   /etc/network/interfaces
auto lo
iface lo inet loopback

auto bond0
iface bond0 inet static
    bond_slaves ${AA[0]} ${AA[1]}
    bond_mode 802.3ad
    bond_xmit_hash_policy layer2+3
    bond_miimon 100
    bond_updelay 200
    bond_downdelay 200
    address $IN_IP
    netmask $NETMASK
    gateway $IP_PREFIX

    up ip route add 10.0.0.0/8 via $IP_PREFIX
    down ip route delete 10.0.0.0/8 via $IP_PREFIX
    up ip route add 172.16.0.0/12 via $IP_PREFIX
    down ip route delete 172.16.0.0/12 via $IP_PREFIX
EOF

    printful "the interface file is now"
    printful_file "/etc/network/interfaces"
}

function rhel_bonding() {
    sudo systemctl disable NetworkManager
    command -v ipcalc || sudo yum  install ipcalc -y &> /dev/null && printful "installed ipcalc"|| printful "cannot install ipcalc netmask will be none"
    IN_IP=$(host `hostname -f`|awk ‘{print $NF}‘)
    #IP_PREFIX=$(hostname -I|awk -F ‘.‘ ‘{print $1"."$2"."$3}‘)
    [ $? != 0 ] && printful ‘cannot get internal ip‘ && exit 1

    printful "now bonding....."
    eths=(eth0 eth1 eth2 eth3 eth4 eth5 eth6)
    eths_10000=()
    eths_1000=()
    for nic in ${eths[@]};do
        sudo /sbin/ethtool $nic 2> /dev/null | grep  10000base &> /dev/null && eths_10000=(${eths_10000[@]} $nic)
        sudo /sbin/ethtool $nic 2> /dev/null | grep  1000base &> /dev/null && eths_1000=(${eths_1000[@]} $nic)
    done
    printful "10000 bonding  ${eths_10000[*]}...."
    # change the original interfaces file.
    printful "eths_10000:${eths_10000[*]}\neths_1000: ${eths_1000[*]}"
    AA=‘‘
    used_eths=$(/sbin/ip a|grep $IN_IP|awk ‘{print $NF}‘)
    [ ${#eths_1000[@]} -ge  2 -a ${#eths_1000[@]} -lt 2 ]  && { AA=(${eths_1000[0]} ${eths_1000[1]});printful "1000 bonding  ${eths_1000[*]}...."; }
    [ ${#eths_10000[@]} -ge  2 ] && { AA=(${eths_10000[0]} ${eths_10000[1]});printful "10000 bonding  ${eths_10000[*]}...."; }
    [ "$used_eths" == ‘‘ ] && printful ‘cannot get used eth nic...‘ && exit 2
    NETMASK=$(ipcalc `/sbin/ip addr show $used_eths | awk ‘NR==3{print $2}‘` --netmask | awk -F ‘=‘ ‘{print $2}‘ )
    [ $? != 0 ] && printful ‘bad netmask! please check...‘ &&exit 1
    [ -z "$NETMASK" -o "$NETMASK" = "255.0.0.0" ] && NETMASK=$(ipcalc `/sbin/ip addr show ${AA[1]} | awk ‘NR==3{print $2}‘` | awk ‘/Netmask/{print $2}‘)
    [ -z $NETMASK ] && exit 1
    IP_PREFIX=$(ipcalc $IN_IP $NETMASK --network | sed -r ‘s/NETWORK=(.*)\.0$/\1.1/‘)
    # back_up
    for nic in ${AA[@]};do
        mv /etc/sysconfig/network-scripts/ifcfg-$nic /tmp &> /dev/null
        cat << EOF | sudo tee /etc/sysconfig/network-scripts/ifcfg-$nic
DEVICE=$nic
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
MASTER=bond0
SLAVE=yes
EOF
    done
    # add bonding file
    cat << EOF |sudo tee   /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=none
USERCTL=no
BONDING_OPTS="mode=802.3ad xmit_hash_policy=layer2+3 miimon=100 updelay=200 downdelay=200"
IPADDR=$IN_IP
NETMASK=$NETMASK
GATEWAY=$IP_PREFIX
EOF
}
function get_os() {
   operating_system=$(facter|grep ‘operatingsystem ‘|awk ‘{print $NF}‘)
   [ $? -ne 0 ] && printful ‘cannot get operating system by facter!‘ && exit 2
   echo $operating_system
}
function main(){
    os=$(get_os)
    echo $os
    if [ "$os" == ‘RedHat‘ ];then
        rhel_bonding
    else if [ "$os" == ‘Debian‘ ];then
        debian_bonding
        fi
    fi
}
main

### check_ping.sh
#!/bin/bash
#
[ -f $1 ] || "echo usage:$0 host.txt"
while read line;do
   ping -c 2 $line -W 1 &> /dev/null
   [ $? -eq 0 ] && echo -e "\e[1;32m$line: ping ok\e[0m"|| echo -e "\e[1;31m$line: ping not ready\e[0m"

done < $1

### check_ssh.sh
#!/bin/bash
#
function check_ssh(){
    ssh   -o ConnectTimeout=3 $1 ‘ls‘ &> /dev/null
    [ $? -eq 0 ] && echo $1‘ ssh ok‘|| echo $1‘ ssh not ready‘
}
[ -f $1 ] || { echo "$1 not a file.usage: bash $0 host.txt"; }
for hosts in `grep -v "#" $1`;do
    [ -z $hosts ] || check_ssh $hosts
done < $1
时间: 2024-10-11 07:01:09

脚本分享的相关文章

Linux生产服务器Shell脚本分享

Linux生产服务器Shell脚本分享 2012-6-6 86市场网 linux 作为一名Linux/unix系统管理员,我经常遇到人问这个问题:shell能做什么?PHP这么强大,为什么不用PHP来完成工作呢?其实相对于PHP这些开发语言而言,shell主要用于数据库备份(SVN备份).计划任务(crontab).服务状态监控.FTP远程备份等.对于这些任务,shell的强大是大家都公认的,这也是每一个Linux/unix系统管理员的基本之一.现在在Windows 2008里也出现了Power

Nginx和PHP-FPM的启动、重启、停止脚本分享

这篇文章主要介绍了Nginx和PHP-FPM的启动.重启.停止脚本分享,脚本中包含start.stop.reload.restart等常用的管理方法,并可以加入系统服务然后使用servicem命令管理,需要的朋友可以参考下 服务器上的Nginx和PHP都是源码编译安装的,不像ubuntu一样有自带service启动脚本,所以不支持类似以前的nginx (start|restart|stop|reload)了.自己动手丰衣足食.以下脚本应该在RHEL, Fedora, CentOS下都适用. 一.

并发批量管理500台以上服务器脚本分享(shell版)

也许很多人认为shell不能并发任务,其实可通过其它一些方式来实现.下面的脚本是我批量快速管理500+服务器脚本,阅读该脚本前建议先看<自动执行远程主机命令expect脚本>.<自动远程拷贝expect脚本>和<getopt:命令行选项.参数处理> 用法: Usage: ./multi_main.sh [-h|--help] [-v|-V|--version] [-l|--iplist ... ] [-c|--config ... ] [-t|--sshtimeout

脚本分享-利用&quot;SED&quot;命令编写一个用于SVN账号管理的交互式脚本

描述 由于公司员工流动性强,SVN服务器总是要添加和删除账号,每次都要反复的配置,当账号密码多了有点眼花缭乱,感觉有点麻烦,为了方便,所以写了一个基于"Sed"命令的用于添加和删除SVN账号的交互式脚本分享! 前提 我们都只到配置SVN服务,有两个文件"passwd"和"authz"."passwd"用于存储账号密码信息,"authz"用于账号权限控制.我们这个脚本依赖于文件结构,需要准备两个规范化的文档.

脚本分享:根据访问日志统计网站每日PV、总带宽、IP统计、url统计等

在平时的运维工作中,我们运维人员需要清楚自己网站每天的总访问量.总带宽.ip统计和url统计等. 虽然网站已经在服务商那里做了CDN加速,所以网站流量压力都在前方CDN层了 像每日PV,带宽,ip统计等数据也都可以在他们后台里查看到的. ------------------------------------------------------------------------------在这里,还是分享一个很早前用到过的shell统计脚本,可以结合crontab计划任务,每天给你的邮箱发送一

AIX进程监控脚本分享一例

分享一个AIX进程监控脚本: 当MWM进程数大于2时,调用sendmail发送邮件通知用户,脚本如下 #!/usr/bin/ksh #---------------------------------------------------------------# # Script Name : MWM Check Shell # Created by  : Xin23 #         on  : 2015.02.04 #------------------------------------

linux系统初始化配置脚本分享

这个脚本是我借鉴某大神的脚本改写的(其实是赤裸裸的拿来用了),功能主要是实现系统自定义配置,搭建原始的linux环境模板,分享给大家,顺便分享个小诀窍: 复制代码后,请使用"notepad++"或其它编辑器打开此文档, "alt+0"将函数折叠后方便查阅 . 插句话,这个方法我是从雪松大神的[python实例手册] [shell实例手册]学到的,感谢他们的共享精神,一直在维护这两个手册的更新,  分享下着两个手册的地址: [python实例手册] [shell实例手

启动sqlserver服务的bat脚本分享

声明下这个脚本不是我写的,忘了是从哪看到的了,在此分享给大家,因为在我的理解中技术就是用来分享的,希望原创作者看到了不要介意. 1.创建个文本,将后缀名改成.bat 2.将下边语句粘贴进去,然后保存即可 复制代码代码如下: @echo off for /f "skip=3 tokens=4" %%i in ('sc query MSSQLSERVER') do set "zt=%%i" &goto :next :next if /i "%zt%&q

mysql数据库自动备份脚本分享

前几篇博客已经相继公开了去转盘网的所有技术细节,如下: 百度网盘爬虫 中文分词算法 邀请好友注册 js分页部分代码 这篇博客我将继续公开数据库自动备份的代码.可以这么说,没有数据库,一切就是个蛋,没有数据库备份,一切还是个蛋,你可以想象数据库备份多么重要.不会linux,不会写shell的朋友麻烦先去补补.不过你说我牛逼,不补也能看懂,那没问题,哈哈,废话不说了.老规矩,上代码: #!/bin/bash time=$(date +"%d-%m-%Y") pre=/home/ubuntu

[开源] android apk 一键生成混淆文件 脚本分享 (python)

今天做的项目有个需求.要把我们的apk 混淆一下. 于是花了一下午的时间研究了一下,用python 写了个一键生成的脚本. 原理: 我的开发环境是  adt bundle 是android sdk 的集成开发环境,自带了ProGuard. 只需要导出的时候,在project.properties 打开注释的代码. 然后选择 export 导出apk 就自动混淆了,ProGuard默认是混淆全部代码的,但是这样经常会引起一些问题. 重点是混淆规则的编写,.总结起来就三条: 1   android