zoukankan      html  css  js  c++  java
  • 项目发布脚本-go

    #!/bin/bash
    
    export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    clear
    
    printf "
    # Name: Downtown_Shell_Deploy_Script
    #
    # Purpose:Deploy tar.gz to the host
    #
    # Notes:
    #    1 Upload your tar.gz file to the path /data/source 
    #
    #    2 ./script_name Filename.postfix
    # For Example:./New_UPDATE_nodejs_tar_update.sh buffetmealapi.tar.gz
    #
    # Return codes:
    # 启动时间 启动程序
    # 14:26 nodejs
    ########################################################
    "
    
    #check user
    if [ $(id -u) != "0" ]
    then 
      echo "Error: You must be root to run this script!!!" 
      exit 1
    fi
    
    if [ -z "$1" ];then
    echo "Usage:script.sh file.tar.gz"
    exit
    else
    echo "执行文件名: $1"
    fi
    
    #Define
    Project_Name_file=$1    #buffetmealapi.tar.gz
    Project_Name=${Project_Name_file%%.*}   #buffetmealapi
    INIT_SCRIPT_URL=/data/source
    Config_URL=/data/config
    Project_Name_Suffix=${Project_Name_file#*.}     #tar.gz
    
    ##工程目录
    PROJECT_NODE_APP_PATH="/data/app/eshine/$Project_Name"
    ##源配置文件模板目录
    PROJECT_NODE_APP_CONFIG_TEMPLATES_PATH="/data/app/eshine/$Project_Name/config-templates"    #/data/app/eshine/storeapi/config-templates/
    ##目标配置文件目录
    PROJECT_NODE_APP_CONFD_PATH="/data/app/confd/config/$Project_Name"   #/data/app/confd/config/storeapi
    
    function_deploy_tar_gz()
    {
      source /etc/profile
      echo -e "33[31m Make Sure REMOVE THIS HOST FROM LVS---LVS---LVS,5 seconds to think? press ctrl+C to cancel 33[0m"
      sleep 2
      #停止shell应用
    ps -ef | grep /data/app/eshine/$Project_Name | grep -v grep | awk '{ print  "kill -9 "  $2}'  | bash
    
      sleep 3
      #创建备份目录
      mkdir -p /data/backup/$(date +%Y%m%d%H%M)
      #创建app工作目录
      mkdir -p /data/app/eshine
      #更新前备份
      if [ -d "/data/app/eshine/$Project_Name" ];then
         mv /data/app/eshine/$Project_Name /data/backup/$(date +%Y%m%d%H%M)/
         echo    "###############################################################"
         echo -e "#             $Project_Name backup complated!                 #"
         echo    "###############################################################"
      else
         echo    "###############################################################"
         echo -e "#            Warning : $Project_Name does not exist!          #"
         echo    "###############################################################"
      fi
      #解压新app包
      cd /data/source
      tar -zxf $Project_Name_file -C ./
      #部署应用
      rm -rf /data/app/eshine/$Project_Name
      mv $Project_Name /data/app/eshine/
    
      #更新配置文件并启用confd监测
    
    #先结束掉该项目的confd进程
    ps -ef | grep confd/config/$Project_Name | grep -v grep | awk '{ print  "kill -9 "  $2}'  | bash
    
    echo "==============================="
    echo "[confd] for $Project_Name killed"
    echo "==============================="
    
    #清理confd项目目录
    rm -rf $PROJECT_NODE_APP_CONFD_PATH
    mkdir -p $PROJECT_NODE_APP_CONFD_PATH/conf.d
    mkdir -p $PROJECT_NODE_APP_CONFD_PATH/templates
    ls $PROJECT_NODE_APP_CONFD_PATH
    
    ##复制配置文件到指定目录
    find $PROJECT_NODE_APP_CONFIG_TEMPLATES_PATH -type f -name "*.*" -exec cp -fr {} $PROJECT_NODE_APP_CONFD_PATH/templates ;
    
    echo ========templates copied=====================
    ls $PROJECT_NODE_APP_CONFD_PATH/*/*
    echo ========templates copied=====================
    
    ##生成模式化文件format_standard.txt
    ##格式为:文件名   文件路径
    
    ##清空format_standard.txt文件
    echo "" > $PROJECT_NODE_APP_CONFD_PATH/format_standard.txt
    
    
    ##提取PROJECT_NODE_APP_CONFIG_TEMPLATES_PATH目录内的子目录作为变量,并提出所有文件名
    PROJECT_NODE_APP_CONFIG_TEMPLATES_L2_LIST=`cd $PROJECT_NODE_APP_CONFIG_TEMPLATES_PATH ; find  $PWD | xargs ls -dl | grep -v "^d" | awk 'BEGIN{FS="/"} {print $(NF-1)"/"$NF}'`
    
    
    #i代表的是$PROJECT_NODE_APP_CONFIG_TEMPLATES_L2_LIST输出出来的所有文件的相对路径
    echo ========config file need to be generate =====================
    echo "${PROJECT_NODE_APP_CONFIG_TEMPLATES_L2_LIST}"
    echo ========config file need to be generate =====================
    
    
    cd $PROJECT_NODE_APP_CONFD_PATH
    
    for i in $PROJECT_NODE_APP_CONFIG_TEMPLATES_L2_LIST
    do
      if [ -f $PROJECT_NODE_APP_PATH/$i ];then
        find $PROJECT_NODE_APP_PATH/$i -type f -name "*.*" |awk 'BEGIN{FS="/"} {printf("%30s	%s
    ",$NF,$0)}' >> $PROJECT_NODE_APP_CONFD_PATH/format_standard.txt
      fi
    done
    
    for i in $PROJECT_NODE_APP_CONFIG_TEMPLATES_L2_LIST
    do
      if [ -f $PROJECT_NODE_APP_PATH/config/$i ];then
        find $PROJECT_NODE_APP_PATH/config/$i -type f -name "*.*" |awk 'BEGIN{FS="/"} {printf("%30s	%s
    ",$NF,$0)}' >> $PROJECT_NODE_APP_CONFD_PATH/format_standard.txt
      fi
    done
    
    
    echo "################# format_standard.txt############"
    cat $PROJECT_NODE_APP_CONFD_PATH/format_standard.txt
    echo "################# format_standard.txt############"
    
    
    
    ##遍历格式化文件并生成模板文件
    cd $PROJECT_NODE_APP_CONFD_PATH
    cat format_standard.txt |awk 'NR>1' |while read F_CONFIG_NAME F_CONFIG_PATH
    do 
      ##生成模板文件
      cat << EOF > conf.d/$F_CONFIG_NAME.toml
    [template]
    #模板文件,基于它进行修改
    src = "$F_CONFIG_NAME"
    #目标文件地址
    dest = "$F_CONFIG_PATH"
    #keys是在etcd上订阅消息的前缀
    keys = [
        "",
    ]
    
    #更新配置后的命令
    reload_cmd = "/data/scripts/restart-${Project_Name}_guard.sh"
    EOF
    done
    
    
    #显示该项目的confd进程数
    ps -ef | grep confd/config/$Project_Name | grep -v grep | wc -l
    
    export ETCDCTL_API=2
    nohup /data/app/confd/bin/confd -config-file /data/app/confd/confd.config -confdir /data/app/confd/config/$Project_Name/ -username root -password Downtown2013 -basic-auth true > /data/app/confd/config/$Project_Name/confd_$Project_Name.log 2>&1 &
    echo "==============================="
    echo "[confd] for $Project_Name Started"
    echo "==============================="
    
    
    
      #启动app
      chmod 755 /data/app/eshine/$Project_Name/$Project_Name
      chmod 755 /data/app/eshine/$Project_Name/*.py
      cd /data/app/eshine/$Project_Name
      pwd
      ps -ef | grep /data/app/eshine/$Project_Name | grep -v grep | awk '{ print  "kill -9 "  $2}'  | bash
      sleep 15
      nohup  /data/app/eshine/$Project_Name/$Project_Name >>/data/logs/$Project_Name.log 2>&1 &
    }
    
    #######Deploy War Done#########
    
    #Decide which script to be run by Project_Name_Suffix
    case $Project_Name_Suffix in
            tar.gz)
                    function_deploy_tar_gz
            ;;
    
            *)
                    echo ".tar.gz allowed only"
    esac
    
    echo ======计划任务========
    
    crontab_add(){
        #根据系统定义crontab路径
        SYSTEM_OS=`lsb_release -a |grep Description |awk -F : '{print $2}' |sed 's/^[ 	]*//g'`
        echo ""
        echo "=== SYSTEM_OS is $SYSTEM_OS===="
        echo ""
        if [[ $SYSTEM_OS =~ Ubuntu ]];then
        CRONTAB_FILE_FOR_ROOT="/var/spool/cron/crontabs/root"
        echo "====Crontab Path is $CRONTAB_FILE_FOR_ROOT"
        else
        CRONTAB_FILE_FOR_ROOT="/var/spool/cron/root"
        echo "====Crontab Path is $CRONTAB_FILE_FOR_ROOT"
        fi
    
        #添加新cron
        cd /data/app/eshine/$Project_Name
        if [ -f crontab/time.txt ];then
        sed -i '/python/d' $CRONTAB_FILE_FOR_ROOT
            sed -i /$Project_Name/d $CRONTAB_FILE_FOR_ROOT
        cat ./crontab/time.txt |egrep -v "^#|^$" >> $CRONTAB_FILE_FOR_ROOT
        sed -i '/python/ s/python/cd /data/app/eshine/MenuRank; python/' $CRONTAB_FILE_FOR_ROOT
        fi
        #立即运行的任务
        if [ -f crontab/once.txt ];then
        chmod 755 crontab/once.txt
        ./crontab/once.txt
        fi
        #查看定时任务状态
        echo "################ 系统计划任务列表Start ################"
        cat $CRONTAB_FILE_FOR_ROOT
        echo "################ 系统计划任务列表End ################"
    }
    Crontab_dir=/data/app/eshine/$Project_Name/crontab
    if [ ! -d "$Crontab_dir" ]; then
    echo "#######没有crontab目录#######"
    else
    main(){
        crontab_add
    }
    main
    
    fi
    exit 0
  • 相关阅读:
    UVALive 6044(双连通分量的应用)
    hdu 3760(2次bfs求最短路)
    zoj 3370(二分+二分图染色)
    sgu 326(经典网络流构图)
    hdu 4291(矩阵+暴力求循环节)
    uva 11381(神奇的构图、最小费用最大流)
    hdu 4685(匹配+强连通分量)
    hdu 4496(并查集)
    hdu 4722(记忆化搜索)
    Linux安装Nginx使用负载均衡
  • 原文地址:https://www.cnblogs.com/37yan/p/6879521.html
Copyright © 2011-2022 走看看