公司网站的架构是通过nginx来做负载均衡的,以前上下线都是通过手动更改配置文件,然后reload nginx的方式来实现!这种方式效率不怎么高,在这里自己写了一个shell脚本,提供给大家参考一下:

#!/bin/bash
CONF="nginx.conf"
HOST=${1:?'错误,请输入你要下线机器的ip,例如:192.168.144.41'}
TestHost=`cat filelist |grep "\<$HOST\>"|wc -l`
if [ $TestHost -eq 0 ];then
    echo "您输入的ip错误,请检查!!"
    exit 1
fi
echo "====================================="
echo -e "1)上线某台机器\n2)下线某台机器\n3)退出"
echo "====================================="
read -p "请输入需要操作的编号:" a
backupfile="nginx.conf.`date +%Y-%m-%d-%H-%M-%S`"
cp $CONF $backupfile
TestONline=`sed -n '/^#.*'"$HOST"'/p' $CONF|wc -l`
TestHost=`cat filelist |grep "\<$HOST\>"|wc -l`
#ONline=`sed -i '/'"$HOST"'/s/^#//g' $CONF`
#OFFline=`sed -i '/'"$HOST"'/s/^/#/g' $CONF`
ONLINE(){
ONline=`sed -i '/'"$HOST"'/s/#//g' $CONF`
        if [ "$TestHost" -eq 0 ];then
            echo "您输入的ip不在线上服务器列表中,请重新输入!"
            exit 1
        else
            if [ $TestONline -eq 0 ];then
                echo "您输入的ip目前已经在线上,请检查!!!"
                exit 1
            else
                read -p "您确定要上线$HOST这台机器吗?(y/n)" cmd
                case $cmd in
                    y|Y)
                    $ONline
                    echo -e "\033[32m \033[05m $HOST已上线!! \033[0m"
                    ;;
                    n|N)
                    exit 1
                    ;;
                    *)
                    echo "您的输入只能是y或n,请重新操作!!"
                    ;;    
                esac
            fi
        fi
}
OFFLINE() {
OFFline=`sed -i '/'"$HOST"'/s/^/#/g' $CONF`
    if [ "$TestHost" -eq 0 ];then
        echo "sorry,您输入的ip不在线上服务器列表中,请重新输入!"
        exit 1
    else
        if [ $TestONline -eq 0 ];then
            read -p "您确定要下线$HOST这台机器吗?(y/n)" CMD
            case $CMD in
                y|Y)  
                                $OFFline
                echo -e "\033[32m \033[05m $HOST已下线!! \033[0m"
                                ;;
                                n|N)
                                exit 1
                                ;;
                                *)
                                echo "您的输入只能是y或n,请重新操作!!"
                exit 1
                                ;;
                        esac          
        else
            echo "您要下线的机器目前已经在线下!!请检查!!"
        fi    
    fi
}
case $a in
    1)
    ONLINE
    ;;
    2)
    OFFLINE
    ;;
    3)
    exit 0
    ;;
esac

注意:

脚本中filelist需要手动建立的

类似:

cat filelist

10.0.0.1

10.0.0.2

10.0.0.3

另外脚本中没有加入重载nginx的操作,有需要的话可以自己添加!!