Linux下部署Spring Boot jar

一、前言

部署Spring Boot项目可以使用Maven命令mvn:clean package将项目打包成只执行的jar文件,然后使用命令java -jar XX.jar来执行。但这样做无法将shell命令行释放,关闭terminal后项目也随之关闭了。这里介绍在Linux系统中后台运行Spring Boot jar文件的方法。

实现这个功能主要依赖于Linux的nohup命令。nohup命令可以将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端。

二、nohup语法

nohup 命令

用途:不挂断地运行命令。
语法:nohup Command [ Arg … ][ & ]

所以只需要在启动命令前加上nohup命令,末尾加上&即可:nohup java -jar XX.jar &。
为了方便,我们可以编写启动脚本start.sh:

nohup java -jar XX.jar &

三、关停脚本stop.sh

PID=`ps -ef | grep xx.jar | grep -v grep | awk '{print $2}'`
if [ -z "$PID" ]
then
    echo Application is already stopped
else
    echo kill $PID
    kill -9 $PID
fi

四、重启脚本run.sh

echo stop application
source stop.sh
echo start application
source start.sh

五、在编写shell脚本的过程中遇到了两个问题

5.1.执行.sh文件提示权限不足

解决办法:执行命令chmod u+x XX.sh赋予当前用于可执行的权限即可。

5.2.提示/bin/bash^M: bad interpreter: 没有那个文件或目录

问题出现的原因是shell脚本是在windows中编写的然后上传到Linux中的,出现了兼容性问题。解决办法:执行vim XX.sh打开shell文件,然后切换到命令模式,执行:set fileformat=unix后保存退出即可。

使用了nohup命令后,会在jar文件目录下生成一个nohup.out文件,可通过其观察当前项目的运行情况.

六、改良后的维护脚本wh.sh

#!/bin/bash
#jar包名称
AppName=xx.jar

#JVM参数
JVM_OPTS="-Dname=$AppName  -Duser.timezone=Asia/Shanghai -Xms512M -Xmx512M -XX:PermSize=256M -XX:MaxPermSize=512M -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps  -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"
APP_HOME=`pwd`
LOG_PATH=$APP_HOME/logs/$AppName.log


if [ "$1" = "" ];
then
    echo -e "\033[0;31m 未输入操作名 \033[0m  \033[0;34m {start|stop|restart|status} \033[0m"
    exit 1
fi

if [ "$AppName" = "" ];
then
    echo -e "\033[0;31m 未输入应用名 \033[0m"
    exit 1
fi

function start()
{
    PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
	if [ x"$PID" != x"" ]; then
	    echo "$AppName is running..."
	else
		nohup java -jar  $JVM_OPTS $AppName &
		#nohup java -jar  $JVM_OPTS $AppName > /dev/null 2>&1 &
		echo "Start $AppName success..."
	fi
}


function stop()
{
    echo "Stop $AppName"
	PID=""
	query(){
		PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
	}

	query
	if [ x"$PID" != x"" ]; then
		kill -TERM $PID
		echo "$AppName (pid:$PID) exiting..."
		while [ x"$PID" != x"" ]
		do
			sleep 1
			query
		done
		echo "$AppName exited."
	else
		echo "$AppName already stopped."
	fi
}


function restart()
{
    stop
    sleep 2
    start
}

function status()
{
    PID=`ps -ef |grep java|grep $AppName|grep -v grep|wc -l`
    if [ $PID != 0 ];then
        echo "$AppName is running..."
    else
        echo "$AppName is not running..."
    fi
}

case $1 in
    start)
    start;;
    stop)
    stop;;
    restart)
    restart;;
    status)
    status;;
    *)
esac
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值