全部博文(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