项目发布脚本-nodejs
- #!/bin/bash
- export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
- clear
- printf "
- # Name: Downtown_Nodejs_Deploy_Script
- #
- # Purpose:Deploy tar.gz to the host
- #
- # Notes:
- # Upload your tar.gz file to the path /data/source
- #
- # ./script_name Filename.postfix
- # For Example:./New_UPDATE_nodejs_tar_update.sh buffetmealapi.tar.gz
- #
- # Return codes:
- # 启动时间 启动程序
- # : nodejs
- ########################################################
- "
- #check user
- if [ $(id -u) != "" ]
- then
- echo "Error: You must be root to run this script!!!"
- exit
- fi
- if [ -z "$1" ];then
- echo "Usage:script.sh file.tar.gz"
- exit
- else
- echo "执行文件名: $1"
- fi
- #Define
- Project_Name_file=$ #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 "\033[31m Make Sure REMOVE THIS HOST FROM LVS---LVS---LVS,5 seconds to think? press ctrl+C to cancel \033[0m"
- sleep
- #停止nodejs应用
- PID=`pm2 list |grep $Project_Name |awk '{print $10}'`
- if [ "$PID" == "online" ];then
- pm2 stop $Project_Name
- pm2 delete $Project_Name
- fi
- sleep
- #创建备份目录
- 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\t%s\n",$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\t%s\n",$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/app/node/bin/pm2 restart $Project_Name"
- 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 "==============================="
- #创建日志目录
- mkdir -p /data/logs/pm2/$Project_Name
- #启动app
- cd /data/app/eshine/$Project_Name
- echo "==============================="
- 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_Suffix
- case $Project_Name_Suffix in
- tar.gz)
- function_deploy_tar_gz
- ;;
- *)
- echo ".tar.gz allowed only"
- esac
- exit 0
项目发布脚本-nodejs的更多相关文章
- jenkins 项目发布脚本
构建shell #!/bin/bash ########################################################################## 编译部分 ...
- 项目发布脚本-nginx
#!/bin/bash export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin clear printf &q ...
- 项目发布脚本-go
#!/bin/bash export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin clear printf &q ...
- 用Shell编写项目发布脚本
1.首先在github上创建一个测试用的仓库 2.本地编写一个可以运行的测试项目,上传至github 3.链接服务器,编写脚本如下:注意:编写前需要在服务器上安装git和maven 执行build_c ...
- Jenkins+GitHub 项目环境搭建和发布脚本(二)
Jenkins+gitHub项目搭建配置 项目发布脚本 profilesScript.sh (支持不同环境配置文件) #!/bin/bash ACTIVE=$ JENKINS_PATH=/var/li ...
- jenkins项目发布
目录 一.简介 二.docker打包 一.后端打包 二.前端打包 三.启动容器 四.完整代码 五.发布测试 六.优化方案 七.源码地址: 八.参考 一.简介 1.该章节基于jenkins.Harbor ...
- 解读ASP.NET 5 & MVC6系列(3):项目发布与部署
本章我们将讲解ASP.NET5项目发布部署相关的内容,示例项目以我们前一章创建的BookStore项目为例. 发布前的设置 由于新版ASP.NET5支持多版本DNX运行环境的发布和部署,所以在部署之前 ...
- T语言TC发布脚本方法
代码模式的注册码发布脚本方法 注册码项目模式的发布脚本方法 1.注册码项目发布版 2.注册码项目代理版 这两种方法都是基于注册码项目来实现的,所以在使用之前,需要先创建注册码项目.
- Win10下IIS配置图解、MVC项目发布图解、IIS添加网站图解
Win10下IIS配置 .找到控制面板:[开始]菜单鼠标右击,打开[控制面板] .打开控制面板,点击[程序],点击[启用或关闭Windows功能] 下一步,点击[启用虎关闭Windows功能] . 开 ...
随机推荐
- springCloud学习之服务注册和发现
leader让完一个简单的springcloud的demo,自己之前听说过springcloud微服务,但是没有重视.现在网上查各种资料,但是感觉不怎么样啊,还是不会,明天晚上把代码给他看,天啦,这个 ...
- 使用Python往手机发送短信(基于twilio模块)
官网是https://www.twilio.com twilio的一句话介绍——提供SDK帮你连接世界上所有人,你可以很方便的调用他们提供的接口来给指定手机发短信,打电话. 首先在twilio的官网注 ...
- AngularJS基础02 神奇的数据绑定(Binding)
作者:arccosxy 转载请注明出处:http://www.cnblogs.com/arccosxy/ 上一节,我们在JS中声明一个scope变量然后在HTML直接访问它,这非常的酷.但是Angu ...
- Linux 下文件
Linux下文件的三个时间(Atime,Mtime,Ctime) [root@node ~]# stat install.log File: `install.log' Size: Blocks: ...
- Cross-origin plugin content from must have a visible size larger than 400 x 300 pixels, or it will be blocked. Invisible content is always blocked.
Cross-origin plugin content from must have a visible size larger than 400 x 300 pixels, or it will ...
- 牛客多校10 D Rikka with Prefix Sum 不是数据结构
https://www.nowcoder.com/acm/contest/148/D 题意: 1e5个数,1e5个操作,操作分为: 1.区间加. 2.整个数列替换为前缀和. 3.区间查询. 查询数小于 ...
- vsftpd上传文件出现553 Could not create file错误解决方法
1.确定目录权限 2.关闭selinux
- [about remote controller]--mstsc-teamviewer-vnc,nomachine
https://www.jianshu.com/p/c80db368ed8a https://www.nomachine.com/download Ubuntu安装VNC,VNC却无法随系统启动,遂换 ...
- word 使用总结
1.标题: 开始->标题栏 2.插入目录: 引用---->更新目录 3.保持分页:页面布局->分隔符->分页符
- 图->连通性->最小生成树(克鲁斯卡尔算法)
文字描述 上一篇博客介绍了最小生成树(普里姆算法),知道了普里姆算法求最小生成树的时间复杂度为n^2, 就是说复杂度与顶点数无关,而与弧的数量没有关系: 而用克鲁斯卡尔(Kruskal)算法求最小生成 ...