公司网站的架构是通过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的操作,有需要的话可以自己添加!!