全部博文(150)
分类: 系统运维
2017-08-02 19:28:37
在更新服务的时候,需要提前在nginx配置里面摘除相应节点,待服务部署后成功再上线,实现平滑的升级后台服务
之前考察并了解几种方法,
H 将当前行放入hold space; :loop 开始一个名为loop的循环; b 从loop循环中,脚本结束 bloop 跳回到loop循环的开始
sed -i "/$app\s*{/{ ## 找到以“$app {”开头的 upstream配置段,这里$app 和下文的$node 为shell传参
H; ## 将 “$app {” 放入hold space备用
:loop;n; ## 开始loop循环,然后读入下一行
s/\(#server\)\s*\($node\)/server \2/; ##找到“#server $node” 用server替换,node
H; ## 将替换结果放入hold space
/}/{b}; ## 如果到了upstream 段落的结尾 "}"则退出循环
bloop}" ## 未到段落结尾继续回到循环第一步
#/bin/sh
set +x
app=$2
node=$3
flag=$1
case $app in
tripWeb_v2)
nginx_conf="/etc/nginx/conf.d/v2.goluk.cn.conf"
;;
*)
nginx_conf="/etc/nginx/conf.d/s.goluk.cn.conf"
;;
esac
case $flag in
online)
sed -i "/$app\s*{/{H;:loop;n;s/\(#server\)\s*\($node\)/server \2/;H;/}/{b};bloop}" $nginx_conf
nginx -t && nginx -s reload
;;
offline)
sed -i "/$app\s*{/{H;:loop;n;s/\(server\s*$node\)/#\1/;H;/}/{b};bloop}" $nginx_conf
nginx -t && nginx -s reload
;;
getconf)
sed -n "/$app\s*{/{H;:loop;n;H;/}/{x;p;b};bloop}" $nginx_conf
;;
*)
echo " Usage: offline|online tripWeb_backend 10.0.1.11 ."
echo " Usage: getconf cdcAdmin_backend ."
exit 1
;;
esac