项目发布脚本-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开发的一个工具,提供了用 ...
随机推荐
- 【cs229-Lecture3】为什么要选择“最小二乘法”这个指标
视频地址:http://v.163.com/movie/2008/1/E/B/M6SGF6VB4_M6SGHM4EB.html 具体的推导过程,讲义上都有,已经很详细了.这里的推导过程大都是自己为了练 ...
- Git学习之Git 暂存区
============================= 修改文件后是否可以直接提交 ============================ (1) 向文件中追加一行内容 $ echo &quo ...
- Webpack 备忘录
Webpack 属于在项目中配置一次就很少改动的那种工具,但这样就导致新项目再配置 Webpack 时会有些生疏,所以将 Webpack 核心概念及常用配置记录如下. 1)核心概念 Webpack 4 ...
- Python Extension Packages 下载
Python Extension Packages下载 这个下载源资源丰富,python支持版本从2.x到3.7,从win32到win64位都有支持,是非常好资源. 特别留下记号备查. Index b ...
- tar解压包的时候出现错误 gzip: stdin: not in gzip format
在Linux环境下,通过tar -zxvf 命令解压文件时遇到”gzip: stdin: not in gzip format“等错误:如图所示 root@cmfchina:/usr/java# ta ...
- dyld: DYLD_ environment variables being ignored because main executable (/usr/bin/sudo) is setuid or setgid
这两个变量被设置了 DYLD_LIBRARY_PATH *或* LD_LIBRARY_PATH, 用下面的明令查找一下,一般在.bash_profile, .bashrc 等文件中.执行brew do ...
- ssh免密码登录之ssh-keygen的用法
A服务器:192.168.100.2 B服务器:192.168.100.3 要达到的目的:A服务器ssh登录B服务器不需要输入密码 1.在A服务器下使用ssh-keygen命令生成公钥/私钥密钥对,执 ...
- Packetbeat协议扩展开发教程(1)
Packetbeat ( https://www.elastic.co/products/beats/packetbeat )是一个开源的网络抓包与分析框架,内置了很多常见的协议解析,如HTPP.My ...
- 解决jenkins下使用HTML Publisher插件后查看html报告显示不正常
在jenkins后使用html publisher查看html报告时,发现显示不全,很多东西显示不了. 在查看官方文档后,这原来是安全问题所导致的. Jenkins安全默认是将以下功能都关闭了 1.j ...
- Office2010安装需要MSXML版本6.10.1129.0的方法
今天给朋友装Office2010,由于朋友之前使用的是绿化版的0ffice2007,所以卸载后安装Office遇到了若要安装Office2010,需要在计算机上安装MSXML版本6.10.1129.0 ...