zoukankan      html  css  js  c++  java
  • Nginx自切换upstream脚本,可配合Jenkins实现自动切换部署

    没找到类似解决方案,自己写了个脚本切换。

    #!/bin/bash
    #By: 不浮不躁 2021-04-07
    
    #传参提示
    if [ ! -n "$1" ] || [ ! -n "$2" ] || [ ! -n "$3" ] || [ ! -n "$4" ];then
        echo "错误:"
        echo "样例使用:sh $0 "nginx文件绝对路径" "upstream名字" "server的ip" "起/停" "
        echo "样例使用:sh $0 "/etc/nginx/conf.d/test.conf" "dapp" "192.168.92.181" "up" "
        exit 1
    fi
    
    Conf=$1
    Upstream=$2
    Ip=$3
    Cmd=$4
    
    Tmp=`cat -n $Conf`
    #获取upstream段开头
    Str=`echo "$Tmp" | grep $Upstream |grep upstream` 
    #获取upstream段,”}“结尾
    Tmp=`echo "$Tmp" | sed -n "/$Str/,/}/p"`
    #echo "$Tmp"
    #获取ip所在行
    Line=`echo "$Tmp" | grep $Ip | awk '{print $1}'`
    #echo $Line
    if [ -z "$Line" ]; then
        echo "未获取到指定代理IP"
        exit 1
    fi
    
    #判断是否注释
    Status=`echo "$Tmp" | grep $Ip | awk '{print $2}' | grep ^# `
    #echo $Status
    if [ -z "$Status" ]; then
        Status="未注释"
        echo $Status
        echo "$Tmp"
        #sed -i "$Line,$Line s/^/#/g" $Conf
    else
        Status="已注释"
        echo $Status
        echo "$Tmp"
    fi
    
    #取消注释
    if [ "$Cmd" == "up" ] && [ $Status == "已注释" ]; then
        sed -i "$Line,$Line s/#//g" $Conf
    
        Tmp=`cat -n $Conf`
        #获取upstream段开头
        Str=`echo "$Tmp" | grep $Upstream |grep upstream`
        #获取upstream段,”}“结尾
        Tmp=`echo "$Tmp" | sed -n "/$Str/,/}/p"`
        echo "$Tmp"
    fi
    
    #注释
    if [ "$Cmd" == "down" ] && [ $Status == "未注释" ]; then
        sed -i "$Line,$Line s/^/#/g" $Conf
        
        Tmp=`cat -n $Conf`
        #获取upstream段开头
        Str=`echo "$Tmp" | grep $Upstream |grep upstream`
        #获取upstream段,”}“结尾
        Tmp=`echo "$Tmp" | sed -n "/$Str/,/}/p"`
        echo "$Tmp"
    fi
    

    使用方式:sh 脚本名 "配置文件绝对路径" "upstream名" "服务ip" "up或down"
    使用方式:sh $0 "/etc/nginx/conf.d/test.conf" "dapp" "192.168.92.181" "up"

    可做自动切换部署方案,好用请点赞。转发需保留出处!!!

  • 相关阅读:
    spring autoWire注解
    spring利用注解来注册bean到容器
    spring的两种属性注入方式setter注入和构造器注入或者自动注入
    嵌套对象
    Effective C++:规定12:不要忘了复制的对象时,它的每一个组成部分
    eclipse如何查看类之间的引用关系
    JavaScript权威指南科20章 client记忆
    IDL 自己定义功能
    2015学校的书面总结招募书面采访蓝汛通信算法
    用百度API实现热(WIFI)、GPS、基站定位
  • 原文地址:https://www.cnblogs.com/bfbz/p/14704037.html
Copyright © 2011-2022 走看看