linux环境批量重启jar,指定输出各服务日志文件

场景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





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jinpengyima

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值