大型项目linux自动化版本发布脚本(shell)之tomcat、nginx服务脚本
最近,又临近博主所负责的一个大型项目的发版了。之前有提到过,该项目涉及到30-40台服务器的发版。且项目客户规定发版需在晚上10-11点左右开始进行,这里博主不得不说每次发布最后都是眼花缭乱。
博主最近想了下,还是决定做些自动化发版的脚本;首先,在批量关闭服务器、批量重启服务器、批量延迟重启服务器、以及批量nginx重启、kill、reload方面都可以做成自动化脚本。当然,还有资源备份、代码备份等等。
自动化脚本来发版后,将一键关闭、重启所有tomcat,一键实现所有Nginx的downline、online、kill,一键备份代码(包括定时任务代码、普通服务器代码、接口服务器代码、消息服务器代码等),一键资源备份,一键数据库备份。当然,在执行自动化脚本之前,服务器必须先配置ssh免密登录。
通过上面的自动化脚本后,我们的整个发版过程就非常简单了:
(1)通过增量打包工具patch-generator-desk实现本次版本增量代码打包,具体参照patch-generator-desk打包软件

(2)使用xftp上传覆盖代码,由于打包出来是可以直接上传实现替换,故此步骤非常简单

(3)一键执行代码备份脚本
(4)执行n_downline_ssh.sh脚本实现Nginx请求重写跳转
(5)执行一键关闭所有tomcat服务器脚本t_kill.sh
(6)执行资源文件以及数据库脚本一键备份的脚本
(7)执行一键启动所有tomcat服务器脚本t_start.sh/t_restart_delay.sh
(8)执行n_go_online_ssh.sh脚本实现Nginx重写加载非跳转配置实现上线
(9)校验本次发版内容完整性
(10)发版结束........
以下是自动化脚本内容:
代码备份相关脚本
t_ump_code_backup.sh(代码备份)
#/bin/bash
#version: 1.0.0
#author: aaron
#email: 592235961@qq.com
#create time: 2018-07-7-31 21:30:00
#function instruction: this shell use to backup tomcat ump code ,use romote ssh command
fileNameStr=date <span class="hljs-string">'+%Y_%m_%d_%H_%M_%S'</span>
SERVERS=(10.x.x.1x3 10.x.x.10x 10.x.x.105 10.x.x.1x0)
echo 总共${#SERVERS[@]}台服务器
for SERVER in ${SERVERS[@]}
do
dat=date <span class="hljs-string">'+%Y-%m-%d %H:%M:%S'</span>
echo ======start backup tomcat ump code $SERVER $dat ===========
ssh root@$SERVER "nohup tar --exclude /opt/wcc/apache-tomcat-7.0.57/webapps/ump/attached --exclude /opt/wcc/apache-tomcat-7.0.57/webapps/ump/download --exclude /opt/wcc/apache-tomcat-7.0.57/webapps/ump/uploads -zcvf /opt/backup/ump${fileNameStr}.tar.gz /opt/wcc/apache-tomcat-7.0.57/webapps/ump 1>/opt/backup/umpcodebackup.log 2>/dev/null & ; exit;"
echo start backup tomcat ump code $SERVER success $dat=
done
echo 自动化脚本任务执行完成
数据库备份相关脚本
t_ump_database_backup.sh(数据备份)
#/bin/bash
#version: 1.0.0
#author: aaron
#email: 592235961@qq.com
#create time: 2018-07-7-31 21:30:00
#function instruction: this shell use to backup ump database ,use romote ssh command
SERVERS=(10.x.x.1xx)
echo ==========总共${#SERVERS[@]}台服务器==========
for SERVER in ${SERVERS[@]}
do
dat=`date '+%Y-%m-%d %H:%M:%S'`
echo ========start backup ump database $SERVER $dat ===========
ssh -Tq root@$SERVER < /opt/wcc_auto_sh/t_remote_dbbackup.sh
echo ========start backup ump database $SERVER success $dat===========
done
echo ==========自动化脚本任务执行完成==========
t_remote_dbbackup.sh(代码备份脚本调用的本地脚本到远程服务器执行)
#/bin/bash
fileNameStr=`date '+%Y%m%d_%H%M%S'`
nohup mysqldump -uroot -p111111 chery_wcc > /opt/cherry/dbbackup/chery_wcc${fileNameStr}.sql 2>/dev/null &
tomcat相关脚本
t_kill.sh(tomcat批量Kill脚本)
#/bin/bash
#version: 1.0.0
#author: aaron
#email: 592235961@qq.com
#create time: 2018-07-7-31 12:30:00
#function instruction: this shell use to kill tomcat downline,use remote ssh command
SERVERS=(10.x.x.1x5 10.x.x.1x6 10.x.x.1x5)
#SERVERS=(10.x.x.1x3 10.x.x.1x4 10.x.x.1x5 10.x.x.1x5 10.x.x.1x6 10.x.x.1x0 10.x.x.1x1 10.x.x.1x2 10.x.x.193 10.x.x.1x4 10.x.x.1x5 10.x.x.1x6)
echo 总共${#SERVERS[@]}台服务器
for SERVER in ${SERVERS[@]}
do
dat=date <span class="hljs-string">'+%Y-%m-%d %H:%M:%S'</span>
echo ======kill tomcat $SERVER $dat ===========
ssh root@$SERVER "ps -ef | grep '/opt/wcc/apache-tomcat-7.0.57|/opt/wcc/t1|/opt/wcc/apache-tomcat-7.0._export' | grep -v grep | awk '{print $2}'| xargs kill;exit;"
echo kill tomcat $SERVER success $dat=
done
echo 自动化脚本任务执行完成
t_restart.sh(批量重启tomcat脚本)
#/bin/bash
#version: 1.0.0
#author: aaron
#email: 592235961@qq.com
#create time: 2018-07-7-31 12:30:00
#function instruction: this shell use to restart multiple tomcat go online,use remote ssh command
SERVERS=(10.x.x.1x5 10.x.x.1x6 10.x.x.1x5)
#SERVERS=(10.x.x.1x3 10.x.x.1x4 10.x.x.1x5 10.x.x.1x5 10.x.x.1x6 10.x.x.1x0 10.x.x.1x1 10.x.x.1x2 10.x.x.193 10.x.x.1x4 10.x.x.1x5 10.x.x.1x6)
echo 总共${#SERVERS[@]}台服务器
for SERVER in ${SERVERS[@]}
do
dat=date <span class="hljs-string">'+%Y-%m-%d %H:%M:%S'</span>
echo ======kill tomcat $SERVER $dat ===========
ssh root@$SERVER "ps -ef | grep '/opt/wcc/apache-tomcat-7.0.57|/opt/wcc/t1|/opt/wcc/apache-tomcat-7.0._export' | grep -v grep | awk '{print $2}'| xargs kill;exit;"
echo kill tomcat $SERVER success $dat=
dat=date <span class="hljs-string">'+%Y-%m-%d %H:%M:%S'</span>
echo ======start tomcat $SERVER $dat ===========
if [ $SERVER = 10.x.x.1x5 ]; then
ssh root@$SERVER "/opt/wcc/apache-tomcat-7.0.57/bin/startup.sh ;/opt/wcc/apache-tomcat-7.0.57_msg/bin/startup.sh;exit;"
elif [ $SERVER = 10.x.x.1x6 ]; then
ssh root@$SERVER "/opt/wcc/apache-tomcat-7.0.57/bin/startup.sh;/opt/wcc/apache-tomcat-7.0._export/bin/startup.sh;exit;"
else
ssh root@$SERVER "/opt/wcc/apache-tomcat-7.0.57/bin/startup.sh;/opt/wcc/t1/bin/startup.sh;exit;"
fi
echo start tomcat $SERVER success $dat=
done
echo 自动化脚本任务执行完成
t_restart_delay_new.sh(批量延时重启tomcat脚本)
#/bin/bash
#version: 1.0.0
#author: aaron
#email: 592235961@qq.com
#create time: 2018-07-7-31 12:30:00
#function instruction: this shell use to restart multiple tomcat go online,use remote ssh command
interval_time=10s
if [ "$1" ]; then
echo =成功设置延迟启动时间设置为:$1s=========
interval_time=$1
else
echo =默认设置延迟启动时间设置为:${interval_time}s=========
fi
SERVERS=(10.x.x.1x5 10.x.x.1x6 10.x.x.1x5)
#SERVERS=(10.x.x.1x3 10.x.x.1x4 10.x.x.1x5 10.x.x.1x5 10.x.x.1x6 10.x.x.1x0 10.x.x.1x1 10.x.x.1x2 10.x.x.1x3 10.x.x.1x4 10.x.x.1x5 10.x.x.1x6)
i=1
echo 总共${#SERVERS[@]}台服务器
for SERVER in ${SERVERS[@]}
do
dat=date <span class="hljs-string">'+%Y-%m-%d %H:%M:%S'</span>
echo ======kill tomcat $SERVER $dat ===========
ssh root@$SERVER "ps -ef | grep '/opt/wcc/apache-tomcat-7.0.57|/opt/wcc/t1|/opt/wcc/apache-tomcat-7.0._export' | grep -v grep | awk '{print $2}'| xargs kill;exit;"
echo kill tomcat $SERVER success $dat=
dat=date <span class="hljs-string">'+%Y-%m-%d %H:%M:%S'</span>
echo ======start tomcat $SERVER $dat ===========
if [ $SERVER = 10.x.x.1x5 ]; then
ssh root@$SERVER "/opt/wcc/apache-tomcat-7.0.57/bin/startup.sh ;/opt/wcc/apache-tomcat-7.0.57_msg/bin/startup.sh;exit;"
elif [ $SERVER = 10.x.x.1x6 ]; then
ssh root@$SERVER "/opt/wcc/apache-tomcat-7.0.57/bin/startup.sh;/opt/wcc/apache-tomcat-7.0._export/bin/startup.sh;exit;"
else
ssh root@$SERVER "/opt/wcc/apache-tomcat-7.0.57/bin/startup.sh;/opt/wcc/t1/bin/startup.sh;exit;"
fi
echo start tomcat $SERVER success $dat=
if [[ "$i" -lt ${#SERVERS[@]} ]]; then
echo ==sleep ${interval_time}=
sleep ${interval_time}
fi
let "i++"
done
echo 自动化脚本任务执行完成
t_start.sh(批量启动tomcat脚本)
#/bin/bash
#version: 1.0.0
#author: aaron
#email: 592235961@qq.com
#create time: 2018-07-7-31 12:30:00
#function instruction: this shell use to start tomcat go online,use romote ssh command
SERVERS=(10.x.x.1x5 10.x.x.1x6 10.x.x.1x5)
#SERVERS=(10.x.x.1x3 10.x.x.1x4 10.x.x.1x5 10.x.x.1x5 10.x.x.1x6 10.x.x.1x0 10.x.x.1x1 10.x.x.1x2 10.x.x.1x3 10.x.x.1x4 10.x.x.1x5 10.x.x.1x6)
echo 总共${#SERVERS[@]}台服务器
for SERVER in ${SERVERS[@]}
do
dat=date <span class="hljs-string">'+%Y-%m-%d %H:%M:%S'</span>
echo ======start tomcat $SERVER $dat ===========
if [ $SERVER = 10.x.x.1x5 ]; then
ssh root@$SERVER "/opt/wcc/apache-tomcat-7.0.57/bin/startup.sh ;/opt/wcc/apache-tomcat-7.0.57_msg/bin/startup.sh;exit;"
elif [ $SERVER = 10.x.x.1x6 ]; then
ssh root@$SERVER "/opt/wcc/apache-tomcat-7.0.57/bin/startup.sh;/opt/wcc/apache-tomcat-7.0._export/bin/startup.sh;exit;"
else
ssh root@$SERVER "/opt/wcc/apache-tomcat-7.0.57/bin/startup.sh;/opt/wcc/t1/bin/startup.sh;exit;"
fi
echo start tomcat $SERVER success $dat=
done
echo 自动化脚本任务执行完成
nginx相关脚本
n_downline_ssh.sh(nginx批量下线脚本)
#/bin/bash
#version: 1.0.0
#author: aaron
#email: 592235961@qq.com
#create time: 2018-07-7-31 21:40:00
#function instruction: this shell use to multiple nginx downline,use remote ssh command
SERVERS=(10.x.x.x0x)
#SERVERS=(10.x.x.1xx 10.x.x.x0x 10.x.x.x8x)
echo 总共${#SERVERS[@]}台服务器
for SERVER in ${SERVERS[@]}
do
dat=date <span class="hljs-string">'+%Y-%m-%d %H:%M:%S'</span>
echo 执行$SERVER nginx下线任务 $dat==
ssh -Tq root@$SERVER < /opt/wcc_auto_sh/n_remote_downline.sh
echo 执行$SERVER nginx下线任务完成,成功下线 $dat==
done
n_go_online_ssh.sh(nginx批量上线脚本)
#/bin/bash
#version: 1.0.0
#author: aaron
#email: 592235961@qq.com
#create time: 2018-07-7-31 21:40:00
#function instruction: this shell use to multiple nginx go online,use remote ssh command
SERVERS=(10.x.x.1xx)
#SERVERS=(10.x.x.x0x 10.x.x.xx2 10.x.x.1xx)
echo 总共${#SERVERS[@]}台服务器
for SERVER in ${SERVERS[@]}
do
dat=date <span class="hljs-string">'+%Y-%m-%d %H:%M:%S'</span>
echo 执行$SERVER nginx上线任务 $dat
ssh -Tq root@$SERVER < /opt/wcc_auto_sh/n_remote_online.sh
echo 执行$SERVER nginx上线任务完成,成功上线 $dat
done
n_kill_ssh.sh(nginx批量Kill脚本)
#/bin/bash
#version: 1.0.0
#author: aaron
#email: 592235961@qq.com
#create time: 2018-07-7-31 21:40:00
#function instruction: this shell use to multiple nginx kill,use remote ssh command
SERVERS=(10.x.x.x0x)
#SERVERS=(10.x.x.1xx 10.x.x.x0x 10.x.x.1xx)
echo 总共${#SERVERS[@]}台服务器
for SERVER in ${SERVERS[@]}
do
dat=date <span class="hljs-string">'+%Y-%m-%d %H:%M:%S'</span>
echo 执行$SERVER nginx kill任务 $dat==
ssh root@$SERVER "ps -ef | grep 'nginx' | grep -v grep | awk '{print $2}'| xargs kill;exit;"
echo 执行$SERVER nginx kill任务完成,成功kill $dat==
done
n_start_ssh.sh(nginx批量start脚本)
#/bin/bash
#version: 1.0.0
#author: aaron
#email: 592235961@qq.com
#create time: 2018-07-7-31 21:40:00
#function instruction: this shell use to multiple nginx kill,use remote ssh command
SERVERS=(10.x.x.x0x)
#SERVERS=(10.x.x.1x1 10.x.x.xx2 10.x.x.1xx)
echo 总共${#SERVERS[@]}台服务器
for SERVER in ${SERVERS[@]}
do
dat=date <span class="hljs-string">'+%Y-%m-%d %H:%M:%S'</span>
echo 执行$SERVER nginx start任务 $dat==
ssh root@$SERVER "/usr/local/nginx/sbin/nginx ; exit;"
echo 执行$SERVER nginx start任务完成,成功start $dat==
done
n_remote_downline.sh(n_downline_ssh.sh调用的本地脚本到远程执行)
#/bin/bash
#version: 1.0.0
#author: aaron
#email: 592235961@qq.com
#create time: 2018-07-7-31 21:40:00
#function instruction: this shell use to multiple nginx downline,use remote ssh command
c1=netstat -antp |grep -v grep |grep nginx |wc -l
echo $c1
cp /usr/local/nginx/conf/nginx_downline.conf /usr/local/nginx/conf/nginx.conf
if [ $c1 -eq 0 ]; then
/usr/local/nginx/sbin/nginx
else
/usr/local/nginx/sbin/nginx -s reload
fi
n_remote_online.sh(n_go_online_ssh.sh调用的本地脚本到远程执行)
#/bin/bash
#version: 1.0.0
#author: aaron
#email: 592235961@qq.com
#create time: 2018-07-7-31 21:40:00
#function instruction: this shell use to multiple nginx go online,use remote ssh command
c1=netstat -antp |grep -v grep |grep nginx |wc -l
echo $c1
rm -rf /usr/local/nginx/conf/nginx.conf;
cp /usr/local/nginx/conf/nginx_go_online.conf /usr/local/nginx/conf/nginx.conf;
if [ $c1 = 0 ]; then
/usr/local/nginx/sbin/nginx
else
/usr/local/nginx/sbin/nginx -s reload
fi
exit
n_restart_ssh.sh(nginx重启脚本)
#version: 1.0.0
#author: aaron
#email: 592235961@qq.com
#create time: 2018-08-01 21:30:00
#function instruction: this shell use to restart multiple nginx go online,use remote ssh command
SERVERS=(10.x.x.xxx 10.x.x.x02 10.x.x.xxx)
echo 总共${#SERVERS[@]}台服务器
for SERVER in ${SERVERS[@]}
do
dat=date <span class="hljs-string">'+%Y-%m-%d %H:%M:%S'</span>
echo ======kill nginx $SERVER $dat ===========
ssh root@$SERVER "ps -ef | grep nginx | grep -v grep | awk '{print $2}'| xargs kill;exit;"
echo kill nginx $SERVER success $dat=
dat=date <span class="hljs-string">'+%Y-%m-%d %H:%M:%S'</span>
echo ======start nginx $SERVER $dat ===========
ssh root@$SERVER "/usr/local/nginx/sbin/nginx ; exit;"
echo start nginx $SERVER success $dat=
done
echo 自动化脚本任务执行完成
n_restart_delay_ssh.sh(nginx延迟重启脚本)
#version: 1.0.0
#author: aaron
#email: 592235961@qq.com
#create time: 2018-08-01 21:30:00
#function instruction: this shell use to restart multiple nginx go online,use remote ssh command
interval_time=60s
if [ "$1" ]; then
echo ===========成功设置延迟启动时间设置为:$1s===================
interval_time=$1
else
echo ===========默认设置延迟启动时间设置为:${interval_time}s===================
fi
i=1
SERVERS=(1x.x.x.xx1 10.x.x.x0x)
#SERVERS=(1x.x.x.xxx 10.x.x.x0x 1x.x.x.x8x)
echo ==========总共${#SERVERS[@]}台服务器==========
for SERVER in ${SERVERS[@]}
do
dat=`date '+%Y-%m-%d %H:%M:%S'`
echo ========kill nginx $SERVER $dat ===========
ssh root@$SERVER "ps -ef | grep nginx | grep -v grep | awk '{print \$2}'| xargs kill;exit;"
echo ========kill nginx $SERVER success $dat===========
dat=`date '+%Y-%m-%d %H:%M:%S'`
echo ========start nginx $SERVER $dat ===========
ssh root@$SERVER "/usr/local/nginx/sbin/nginx ; exit;"
echo ========start nginx $SERVER success $dat===========
if [[ "$i" -lt ${#SERVERS[@]} ]]; then
echo ==sleep ${interval_time}=
sleep ${interval_time}
fi
let "i++"
done
echo 自动化脚本任务执行完成
最后总结,由于博主其它数据资源备份脚本还没写好,今天先写到这里,其它脚本后续将补充到此篇文章。以上是博主本次文章的全部内容,如果大家觉得博主的文章还不错,请点赞;如果您对博主其它服务器技术或者博主本人感兴趣,请关注博主博客,并且欢迎随时跟博主沟通交流。
大型项目linux自动化版本发布脚本(shell)之tomcat、nginx服务脚本的更多相关文章
- nginx 服务脚本编写模板
编写nginx服务脚本:脚本内容如下: [root@www ~]# cat /etc/init.d/nginx #!/bin/bash # nginx Startup script for the N ...
- Gitlab+Jenkins学习之路(八)之发布maven项目及按版本发布
一.什么是Maven maven是一个项目管理和综合工具.Maven提供给开发人员构建一个完整的生命周期框架. 开发团队可以自动完成该项目的基础设施建设,Maven使用标准的目录结构和默认构建生命周期 ...
- 团队项目作业-Beta版本发布
团队成员: 学号 姓名 201731062234 薛磊 201731062230 李林 201731062231 燕泓达 201731062232 陈东 201731062229 沈瑞琦 201731 ...
- 软工造梦厂团队项目(Alpha版本发布2)
课程 (https://edu.cnblogs.com/campus/xnsy/GeographicInformationScience) 作业要求 https://www.cnblogs.com/h ...
- supervisor开机自动启动脚本+redis+MySQL+tomcat+nginx进程自动重启配置
[root@mongodb-host supervisord]# cat mongo.conf [program:mongo]command=/usr/local/mongodb/bin/mongod ...
- CakeDC(cakephp company)Git workflow--适合于较大团队大型项目开发
CakeDC Git workflow是一个项目开发和版本发布的工作流,在这个工作流程中开发和版本发布周期是基于几个关键阶段(key phases): Development: 所有活跃的开发活动都由 ...
- ABP大型项目实战(2) - 调试与排错 - 日志 - 查看审计日志
这是<ABP大型项目实战>系列文章的一篇. 项目发布到生产环境后难免会有错误. 那么如何进行调试和排错呢? 我看到俱乐部里有人是直接登陆生产服务器把数据库下载到开发机器进行调试排错 ...
- 【 Linux 】lvs-dr模型实现HA,后端Nginx、PHP、MySQL分离 搭建wordpress站点
要求: 1. wordpress程序通过nfs共享给各个realserver 2. 后端realserver中的nginx和php分离 网络结构图: 环境说明: OS:centos6 ...
- 比Ansible更吊的自动化运维工具,自动化统一安装部署自动化部署udeploy 1.0 版本发布
新增功能: 逻辑与业务分离,完美实现逻辑与业务分离,业务实现统一shell脚本开发,由框架统一调用. 并发多线程部署,不管多少台服务器,多少个服务,同时发起线程进行更新.部署.启动. 提高list规则 ...
随机推荐
- BAT面试题 - 找一个无序实数数组中的最大差值
题目描写叙述: 一个无序的实数数组a[i].要求求里面大小相邻的实数的差的最大值.比方 double a[]={1,5,4,0.2,100} 这个无序的数组,相邻的数的最大差值为100-5=95. 题 ...
- amazeui学习笔记--css(常用组件1)--小徽章Badge
amazeui学习笔记--css(常用组件1)--小徽章Badge 一.总结 1.am-badge:添加am-badge来声明小徽章对象 <span class="am-badge a ...
- 微信小程序踩坑- tabBar.list[3].selectedIconPath 大小超过 40kb
重新启动微信小程序编辑器的时候遇到了这样的一个问题: tabBar.list[3].selectedIconPath 大小超过 40kb 微信小程序开发的过程之中总会出现这样或者那样的错误,需要我们耐 ...
- [React Intl] Render Content Based on a Number using react-intl FormattedMessage (plural)
Using the react-intl FormattedMessage component, we’ll learn how to render content conditionally in ...
- 在 Swift 项目中实现侧滑菜单-利用 SWRevealViewController
你可以完全自己手动写一个侧滑菜单,但是现在在 GitHub 上面已经有很多免费的开源库了,如果不是有很特别的需求,大可不必新建一个轮子. 在这里我使用的这个第三方库名字叫做 SWRevealViewC ...
- html5 10大html5前端框架
Bootstrap 首先说 Bootstrap,估计你也猜到会先说或者一定会有这个( 呵呵了 ),这是说明它的强大之处,拥有框架一壁江山的势气.自己刚入道的时候本着代码任何一个字母都得自己敲出来挡我者 ...
- iOS_01_什么是ios
* ios是一款由苹果公司开发的操作系统(os是Operating Systen的简称),就像平时在电脑上用的Window XP.Window 7.都是操作系统. * 那什么是操作系统呢?操作系统其实 ...
- [转载]MVC中单用户登录
转自:http://www.cnblogs.com/firstcsharp/archive/2013/05/19/3087481.html 把下面这段代码放在登录用户验证以后: //用户登录验证通 ...
- thinkphp3.2.3 excel导出,下载文件,包含图片
关于导出后出错的问题 https://segmentfault.com/q/1010000005330214 https://blog.csdn.net/ohmygirl/article/detail ...
- iOS调试 - 基本技巧
在程序中,无论是你想弄清楚为什么数组中有3个对象而不是5个,或者为什么一个新的玩家开始之后,游戏在倒退——调试在这些处理过程中是比较重要的一部 分.通过本文的学习,我们将知道在程序中,可以使用的大多数 ...
