項目發布指令碼-go

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
#!/bin/bashexport PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/binclearprintf "# 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 userif [ $(id -u) != "0" ]then   echo "Error: You must be root to run this script!!!"   exit 1fiif [ -z "$1" ];thenecho "Usage:script.sh file.tar.gz"exitelseecho "執行檔案名稱: $1"fi#DefineProject_Name_file=$1    #buffetmealapi.tar.gzProject_Name=${Project_Name_file%%.*}   #buffetmealapiINIT_SCRIPT_URL=/data/sourceConfig_URL=/data/configProject_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/storeapifunction_deploy_tar_gz(){  source /etc/profile  echo -e "\033[31m Make Sure REMOVE THIS HOST FROM LVS---LVS---LVS,5 seconds to think? press ctrl+C to cancel \033[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}'  | bashecho "==============================="echo "[confd] for $Project_Name killed"echo "==============================="#清理confd項目目錄rm -rf $PROJECT_NODE_APP_CONFD_PATHmkdir -p $PROJECT_NODE_APP_CONFD_PATH/conf.dmkdir -p $PROJECT_NODE_APP_CONFD_PATH/templatesls $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_PATHfor i in $PROJECT_NODE_APP_CONFIG_TEMPLATES_L2_LISTdo  if [ -f $PROJECT_NODE_APP_PATH/$i ];then    find $PROJECT_NODE_APP_PATH/$i -type f -name "*.*" |awk 'BEGIN{FS="/"} {printf("%30s\t%s\n",$NF,$0)}' >> $PROJECT_NODE_APP_CONFD_PATH/format_standard.txt  fidonefor i in $PROJECT_NODE_APP_CONFIG_TEMPLATES_L2_LISTdo  if [ -f $PROJECT_NODE_APP_PATH/config/$i ];then    find $PROJECT_NODE_APP_PATH/config/$i -type f -name "*.*" |awk 'BEGIN{FS="/"} {printf("%30s\t%s\n",$NF,$0)}' >> $PROJECT_NODE_APP_CONFD_PATH/format_standard.txt  fidoneecho "################# format_standard.txt############"cat $PROJECT_NODE_APP_CONFD_PATH/format_standard.txtecho "################# format_standard.txt############"##遍曆格式檔案並產生模板檔案cd $PROJECT_NODE_APP_CONFD_PATHcat format_standard.txt |awk 'NR>1' |while read F_CONFIG_NAME F_CONFIG_PATHdo   ##產生模板檔案  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"EOFdone#顯示該項目的confd進程數ps -ef | grep confd/config/$Project_Name | grep -v grep | wc -lexport ETCDCTL_API=2nohup /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_Suffixcase $Project_Name_Suffix in        tar.gz)                function_deploy_tar_gz        ;;        *)                echo ".tar.gz allowed only"esacecho ======計劃任務========crontab_add(){#根據系統定義crontab路徑SYSTEM_OS=`lsb_release -a |grep Description |awk -F : '{print $2}' |sed 's/^[ \t]*//g'`echo ""echo "=== SYSTEM_OS is $SYSTEM_OS===="echo ""if [[ $SYSTEM_OS =~ Ubuntu ]];thenCRONTAB_FILE_FOR_ROOT="/var/spool/cron/crontabs/root"echo "====Crontab Path is $CRONTAB_FILE_FOR_ROOT"elseCRONTAB_FILE_FOR_ROOT="/var/spool/cron/root"echo "====Crontab Path is $CRONTAB_FILE_FOR_ROOT"fi#添加新croncd /data/app/eshine/$Project_Nameif [ -f crontab/time.txt ];thensed -i '/python/d' $CRONTAB_FILE_FOR_ROOT        sed -i /$Project_Name/d $CRONTAB_FILE_FOR_ROOTcat ./crontab/time.txt |egrep -v "^#|^$" >> $CRONTAB_FILE_FOR_ROOTsed -i '/python/ s/python/cd \/data\/app\/eshine\/MenuRank; python/' $CRONTAB_FILE_FOR_ROOTfi#立即啟動並執行任務if [ -f crontab/once.txt ];thenchmod 755 crontab/once.txt./crontab/once.txtfi#查看定時任務狀態echo "################ 系統計劃工作清單Start ################"cat $CRONTAB_FILE_FOR_ROOTecho "################ 系統計劃工作清單End ################"}Crontab_dir=/data/app/eshine/$Project_Name/crontabif [ ! -d "$Crontab_dir" ]; thenecho "#######沒有crontab目錄#######"elsemain(){crontab_add}mainfiexit 0

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.