项目发布脚本-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:
# 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
#停止shell应用
ps -ef | grep /data/app/eshine/$Project_Name | grep -v grep | awk '{ print "kill -9 " $2}' | bash 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/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/^[ \t]*//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 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
项目发布脚本-go的更多相关文章
- jenkins 项目发布脚本
构建shell #!/bin/bash ########################################################################## 编译部分 ...
- 用Shell编写项目发布脚本
1.首先在github上创建一个测试用的仓库 2.本地编写一个可以运行的测试项目,上传至github 3.链接服务器,编写脚本如下:注意:编写前需要在服务器上安装git和maven 执行build_c ...
- 项目发布脚本-nginx
#!/bin/bash export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin clear printf &q ...
- 项目发布脚本-nodejs
#!/bin/bash export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin clear printf &q ...
- Jenkins+GitHub 项目环境搭建和发布脚本(二)
Jenkins+gitHub项目搭建配置 项目发布脚本 profilesScript.sh (支持不同环境配置文件) #!/bin/bash ACTIVE=$ JENKINS_PATH=/var/li ...
- 解读ASP.NET 5 & MVC6系列(3):项目发布与部署
本章我们将讲解ASP.NET5项目发布部署相关的内容,示例项目以我们前一章创建的BookStore项目为例. 发布前的设置 由于新版ASP.NET5支持多版本DNX运行环境的发布和部署,所以在部署之前 ...
- T语言TC发布脚本方法
代码模式的注册码发布脚本方法 注册码项目模式的发布脚本方法 1.注册码项目发布版 2.注册码项目代理版 这两种方法都是基于注册码项目来实现的,所以在使用之前,需要先创建注册码项目.
- Win10下IIS配置图解、MVC项目发布图解、IIS添加网站图解
Win10下IIS配置 .找到控制面板:[开始]菜单鼠标右击,打开[控制面板] .打开控制面板,点击[程序],点击[启用或关闭Windows功能] 下一步,点击[启用虎关闭Windows功能] . 开 ...
- 将Gradle项目发布到Jcenter和Maven Central
Jcenter和Maven Central 为了方便我们理解Android studio是如何帮助我们获取开源库的,我们需要理清几个概念.Apache Maven是Apache开发的一个工具,提供了用 ...
随机推荐
- 【.netcore学习】.netcore添加到 supervisor 守护进程自启动报错
配置 supervisor [program:HelloWebApp] command=dotnet run directory=/home/python/dotnet/myweb/mywebapi ...
- WP8.1学习系列(第十章)——中心控件Hub设计指南
Windows Phone 应用商店应用中的中心控件指南 在本文中 说明 示例 用法指南 设计指南 相关主题 重要的 API Hub (XAML) HubSection (XAML) 说明 中心控 ...
- css方法 - 移动端h5在iphonex的适配
@media only screen and (device-width:375px) and (device-height:812px) and (-webkit-device-pixel-rati ...
- Sencha Touch 实战开发培训 视频教程 第二期 第七节
2014.4.21 晚上8:20左右开课. 本节课视频耗时比较短,不过期间意外情况比较多,录制时间偏长了点. 本期培训一共八节,前两节免费,后面的课程需要付费才可以观看. 本节内容: 视频的录制播放 ...
- Struts2之命名空间与Action的三种创建方式
看到上面的标题,相信大家已经知道我们接下来要探讨的知识了,一共两点:1.package命名空间设置:2.三种Action的创建方式.下面我们开始本篇的内容: 首先我们聊一聊命名空间的知识,namesp ...
- vue Element-UI组件
一.UI组件 目的: 提高开发效率, 别人提供好一切, 拿过来直接用饿了么团队开源一个基于vue组件库 Element-UI ==> pc端 文档: http://element-cn.elem ...
- 【咸鱼教程】Egret中可长按复制的文本(例如复制优惠码)
一 实际效果二 实现原理三 源码下载 在egret中实现长按复制文本效果,一般用于复制优惠码什么的. 一 实际效果 二 实现原理 在egret的游戏元素都是绘制在canvas上的,我们 ...
- mysql概要(二)类型(数值型,字符型,时间类型
1.mysql数值型范围 tinyint可选属性 tinyint(N) unsigned zerofill N:表示显示长度,与zerofill配合使用,即长度不够用0填充,并且自动变成无符号的数,N ...
- js的mime类型有哪些?
js中的mime类型 常见类型 扩展名 类型/子类型 txt text/plain doc application/msword exe application/octet-stream pdf ap ...
- How are you vs How are you doing
How are you与How are you doing,有何不同呢? 貌似没有不同…… 中国教科书式的回答是"Fine, thank you, and you?" 随便一点&q ...