场景1:
1.各程序包放在同一个文件夹下;
2.程序包名不带版本号;
3.重启命令文件与程序包同一个目录下;
4.生成指定日志文件(如统一放在当前目录下的logs文件夹)
重启文件:
#!/bin/bash
#--------------------------------------------
# 说明:
# 1.以下是批处理文件(devDeploy.sh 此文件可自行更名)内容,修改成你实际参数后,执行该文件即可:sh devDeploy
# 2.参数说明
# path: 项目存放路径
# path_jdk: jdk路径
# path_log: 项目日志存放路径
# start_name: 项目名称,以数组形式自行补录
#--------------------------------------------
path="/usr/server/xxx/target/"
path_jdk="/usr/local/java/jdk1.8.0_241/bin/java"
path_log=$path"logs/"
start_name=(project1 project2 project3)
if [ ! -d $path_log ]; then
mkdir $path_log
echo "创建日志文件夹:"$path_log
fi
function start () {
echo "开始启动服务 ..."
for service in ${start_name[@]}
do
name_jar=${service}.jar
nohup $path_jdk -jar $path${name_jar} -Xms1024m -Xmx1024m > $path_log${service}.log 2>&1 &
echo "${service} 启动..."
done
}
function stop (){
echo "关闭服务 ..."
for i in ${start_name[@]}
do
name=$i
pid=`ps aux|grep ${name}.jar|egrep -v 'grep|Dspring.application.name'|awk '{print $2}'`
if [[ $pid = '' ]];then
echo "${name} 未启动"
else
kill -9 $pid
echo "${name} 停止"
fi
sleep 1
done
}
stop
start
场景2:
1.各程序包分别独立放在各自服务为名的文件夹下(即:a/a.jar,b/b.jar,c/c.jar);
2.程序包名带版本号(后缀如:-2.0.0.jar);
3.重启命令文件与程序包文件夹同一个目录下;
4.不生成指定日志文件;
5.预先设定好jdk环境变量。
重启文件:
#!/bin/bash
#--------------------------------------------
# 说明:
# 1.以下是批处理文件(devDeploy.sh 此文件可自行更名)内容,修改成你实际参数后,执行该文件即可:sh devDeploy
# 2.参数说明
# path: 项目存放路径
# start_name: 项目名称,以数组形式自行补录
#--------------------------------------------
path="/usr/server/xxx/target/"
start_name=(project1 project2 project3)
function start () {
echo "启动服务 ..."
for service in ${start_name[@]}
do
name_jar="${service}-2.0.0.jar"
nohup java -jar -Duser.timezone=GMT+8 -Xms256M -Xmx512M -Xmn64M -Dfile.encoding=UTF-8 $path${service}'/'${name_jar} >/dev/null 2>&1 &
sleep 2
echo "${service} 已启动"
done
}
function stop (){
echo "关闭服务 ..."
for service in ${start_name[@]}
do
name_jar="${service}-2.0.0.jar"
#注意!这里获取${name_jar}的pid,而不是${service},这样避免误杀情况
pid=`ps aux|grep ${name_jar}|egrep -v 'grep|Dspring.application.name'|awk '{print $2}'`
if [[ $pid = '' ]];then
echo "${service} 未启动"
else
kill -9 $pid
echo "${service} 停止"
fi
sleep 1
done
}
stop
start
附-批量升级脚本
使用场景示例:
1.预先把要升级的程序包放在待发布的目录下:path_down
2.备份程序从path_down_to 到 path_backups
3.剪切移动新包覆盖旧包
4.重启服务
#!/bin/bash
#--------------------------------------------
# 说明:
# 1.以下是批处理文件(pushAndRestart.sh 此文件可自行更名)内容,修改成你实际参数后,执行该文件即可:sh devDeploy
# 2.参数说明
# path_down: 发布项目的下载路径
# path_down_to: 发布项目的实际部署路径
# path_backups: 发布项目的备份路径
#--------------------------------------------
path_down=~/pushprojects
path_down_to=/usr/server/xxx/target
path_backups=/usr/server/xxx/target
# 统计当前发布程序个数
num=$(ls *.jar |wc -l)
echo '当前正在发布的程序有'$num'个'
if test $num -eq '0'
then
echo '未有新发布内容,发布完毕'
else
filenames=$(find *.jar)
echo -e '分别是:\n'$filenames'\n遍历操作...'
filenamejar=$filenames
arr=($filenamejar)
for service in ${arr[@]}
do
echo '正在执行程序'$service
#备份目标路径下的程序
mv $path_down_to'/'$service $path_backups'/'$service''$(date "+%Y%m%d%H%M%S")
echo '已备份:'$service
sleep 1
#向目标路径下拷贝程序
mv $path_down'/'$service $path_down_to'/'$service
echo '已更新:'$service
sleep 1
#重启目标路径下程序(借助各服务各自的启动文件来执行,或一次性执行批量重启服务文件)
#sh $path_down_to'/'startup.sh'
done
#此处为一次性执行批量重启服务文件(注意!这里重启的服务具体看restartAll.sh里面的内容来决定)
sh $path_down_to'/'restartAll.sh
echo '调用批量启动命令:'$path_down_to'/'restartAll.sh
echo '发布完毕'
fi