shell脚本启动、停止、重启SpringBoot jar包

后端 潘老师 5个月前 (12-19) 147 ℃ (0) 扫码查看

本文主要讲解关于shell脚本如何实现启动、停止、重启SpringBoot jar包相关内容,让我们来一起学习下吧!

一、前言

在我们使用SpringBoot框架开发完一个项目后,需要将该项目打成jar包,放到用于生产的服务器上去运行。

一般都是执行 java -jar xxx.jar &命令运行,但是这样是有问题的。
比如启动时需要加入参数,如-Dxxx=xxx,这个命令就会很长不易读且容易忘。所以,最好
是使用shell脚本将配置与命令维护起来。

二、脚本内容

start.sh

#!/bin/bash
#这里可替换为你自己的执行程序,其他代码无需更改
APP_NAME=xxx.jar

#使用说明,用来提示输入参数
usage() {
    echo "Usage: sh 脚本名.sh [start|stop|restart|status]"
    exit 1
}

#检查程序是否在运行
is_exist(){
  pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
  #如果不存在返回1,存在返回0
  if [ -z "${pid}" ]; then
   return 1
  else
    return 0
  fi
}

#启动方法
start(){
  is_exist
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} is already running. pid=${pid} ."
  else
    nohup java -jar /home/admin/$APP_NAME > /dev/null 2>&1 &
    echo "${APP_NAME} start success"
  fi
}

#停止方法
stop(){
  is_exist
  if [ $? -eq "0" ]; then
    kill -9 $pid
  else
    echo "${APP_NAME} is not running"
  fi
}

#输出运行状态
status(){
  is_exist
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} is running. Pid is ${pid}"
  else
    echo "${APP_NAME} is NOT running."
  fi
}

#重启
restart(){
  stop
  start
}

#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  *)
    usage
    ;;
esac

三、使用方式

  • 给start.sh文件授权:chmod 744 start.sh
  • 启动服务,在当前目录下执行:./start.sh start
  • 关闭服务,在当前目录下执行:./start.sh stop
  • 重启服务,在当前目录下执行:./start.sh restart
  • 查看服务状态,在当前目录下执行:./start.sh status

四、注意事项

上面那个脚本的核心语句是:

nohup java -jar /home/admin/$APP_NAME > /dev/null 2>&1 &

可能有同学不知道第一个箭头后面的 /dev/null是什么意思,其实这里隐藏了一个大坑

网上很多脚本,也是类似的逻辑,但他们一般都会把/dev/null换成一个指定的文件路径,所有的日志都会输入到这个文件中。我们去使用的时候发现也没啥问题,还觉得这样挺好的,其实不然,这里的“没问题”只是现在没问题,一般倒霉都在几个月后。

使用有问题脚本的同学,会在几个月后收到服务器宕机的消息,登上服务器排查问题的时候会发现整个服务器都有问题了,轻则命令失效,重则无法连接。最后查到原因:
整个服务器的存储都满了,占满服务器存储的是我们服务的日志文件,上面那个日志文件几十个G,删掉这个文件就好了。

/dev/null通常被用于丢弃不需要的输出流。这里的日志都是SpringBoot的日常日志,
正常都是用logback或者log4j配置好了,根本不需要再使用nohup输出一次,所以nohup输出的日志直接丢弃就行了。

这些都是我自己血与泪的教训(πーπ),警示自己、警示后人。

五、开启远程debug

如果将

nohup java -jar /home/admin/$APP_NAME > /dev/null 2>&1 &

改成

nohup java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar /home/admin/xxxx/$APP_NAME > /dev/null 2>&1 &

也就是在java命令后面加上
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005

那么就可以开启远程debug模式。这里顺便说一下Java远程debug怎么开,我用的开发工具是idea,如下步骤图示:

在host、port处输入远程服务IP地址和端口,点击运行即可开启远程debug。
特别注意:当远程debug结束后一定要记得删除该指令,这个属于一个后门,打开后别人也可以连接了。

以上就是关于shell脚本如何实现启动、停止、重启SpringBoot jar包相关的全部内容,希望对你有帮助。欢迎持续关注潘子夜个人博客,学习愉快哦!


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/back/12675.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】