用shell脚本实现springboot项目重启

由于在工作的时候,修改代码的过后,然后重新打包上传指定的jar文件,这个时候通过ps -aux | grep java命令找到原来的运行的jar包,然后通过kill -9 线程Id,最后再执行 java -jar jar包的名字。每次修改过后打包上传都要执行这三条的命令,太过于繁琐。

于是我想出用docker来部署,但是docker也必须要重启容器,也过于麻烦。于是就想写个shell脚本来执行的我们的三条指令。

本人的项目中主要有三个jar,分别是law-biz-lawyer-1.0.jar,law-biz-api-1.0.jar,law-biz-mng-1.0.jar,然后修改过后,每次要重新运行,shell中难点就是怎么获取到指定的线程Id?于是在网上查阅相关的资料,终于找到了如下的指令

# $1变量是自己shell运行后面跟的第一个参数
# grep -v grep 是在列出的进程中去除含有关键字 grep 的进程
# grep -v /bin/sh 是在列出的进程中去除含有关键字 /bin/sh 的进程 为了排除 shell运行的进程,因为在杀死原来的Java进程后还要执行启动的Java
# awk '{print $2}' 一行一行的读取指定的文件, 以空格作为分隔符,打印第二个字段
ps -ef|grep $1|grep -v grep|grep -v PPID|grep -v /bin/sh|awk '{print $2}'

既然能获取到线程的Id,那就能杀死这个指定的进程,然后再去指定的目录下执行启动jar。于是写出下面的shell文件

#!/bin/sh
#根据进程名杀死进程
if [ $# -lt 1 ]
then
  echo "缺少参数: procedure_name"
  exit 1
fi
# 根据输入的应用名,找出指定的应用的线程Id
PROCESS=`ps -ef|grep $1|grep -v grep|grep -v PPID|grep -v /bin/sh|awk '{print $2}'`
#echo "$PROCESS"
# 然后打印杀死的线程的Id
echo "Kill the $1 process [ ${PROCESS[0]} ]"
# 杀死指定的线程
kill -9 $PROCESS
echo "执行-----启动"
# 根据指定的应用名称启动指定的应用
if [ $1 = "law-biz-api-1.0.jar" ]
then
  echo "启动api"
  cd /root/apiservice/green
  nohup java -jar $1 >nohup.out 2>&1 &
  exit 1
fi
if [ $1 = "law-biz-lawyer-1.0.jar" ]
then
  echo "启动lawyer"
  cd /root/lawyerservice/green
  nohup java -jar $1 >nohup.out 2>&1 &
  exit 1
fi
if [ $1 = "law-biz-mng-1.0.jar" ]
then
  echo "启动mng"
  cd /root/mngservice/green
  nohup java -jar $1 >nohup.out 2>&1 &
  exit 1
fi

最后执行的效果如下

在这里插入图片描述

运维大佬勿喷!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值