博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
项目发布脚本-nodejs
阅读量:2228 次
发布时间:2019-05-09

本文共 5908 字,大约阅读时间需要 19 分钟。

#!/bin/bashexport PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/binclearprintf "# Name: Downtown_Nodejs_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 5  #停止nodejs应用  PID=`pm2 list |grep $Project_Name |awk '{print $10}'`  if [ "$PID"  == "online" ];then    pm2 stop $Project_Name    pm2 delete $Project_Name  fi  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/app/node/bin/pm2 restart $Project_Name"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 "==============================="  #创建日志目录  mkdir -p /data/logs/pm2/$Project_Name  #启动app  cd /data/app/eshine/$Project_Nameecho "==============================="echo "sleep 15 secs"echo "==============================="sleep 15  if [ -f "pm2.json" ];then  pm2 start pm2.json  echo "=== pm2 start pm2.json ==="  else  pm2 start server/server.js --log /data/logs/pm2/$Project_Name/$Project_Name.log --name="$Project_Name"  echo "=== pm2 start server/server.js ==="   fi}#######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"esacexit 0

 

转载于:https://www.cnblogs.com/37yan/p/7110947.html

你可能感兴趣的文章
深入理解JVM虚拟机4:Java class介绍与解析实践
查看>>
深入理解JVM虚拟机5:虚拟机字节码执行引擎
查看>>
深入理解JVM虚拟机6:深入理解JVM类加载机制
查看>>
深入了解JVM虚拟机8:Java的编译期优化与运行期优化
查看>>
深入理解JVM虚拟机9:JVM监控工具与诊断实践
查看>>
深入理解JVM虚拟机10:JVM常用参数以及调优实践
查看>>
深入理解JVM虚拟机12:JVM性能管理神器VisualVM介绍与实战
查看>>
深入理解JVM虚拟机13:再谈四种引用及GC实践
查看>>
Spring源码剖析1:Spring概述
查看>>
Spring源码剖析2:初探Spring IOC核心流程
查看>>
Spring源码剖析5:JDK和cglib动态代理原理详解
查看>>
Spring源码剖析6:Spring AOP概述
查看>>
搞懂分布式技术11:分布式session解决方案与一致性hash
查看>>
搞懂分布式技术12:分布式ID生成方案
查看>>
搞懂分布式技术13:缓存的那些事
查看>>
搞懂分布式技术14:Spring Boot使用注解集成Redis缓存
查看>>
搞懂分布式技术15:缓存更新的套路
查看>>
搞懂分布式技术16:浅谈分布式锁的几种方案
查看>>
搞懂分布式技术17:浅析分布式事务
查看>>
搞懂分布式技术18:分布式事务常用解决方案
查看>>