Spring boot项目打包成jar在linux环境下设置开机自启动

2022年6月5日08:25:34

#!/bin/bash

# The three branches of the scouting program,Add to auto.
# chkconfig: 2345 20 80
# description: py-0.0.1-SNAPSHOT-exec.jar
# author: Love丶TG

# 这样的启动方式不是最好的,一般都是:友好的控制nginx执行连接端口,再处理启动与停止操作
echo "******************************************************"
echo "******* Welcome to launch the puzzle App *************"
echo "******************************************************"

# import JDK config
JAVA_HOME=/usr/java/jdk1.8.0_111
JRE_HOME=/usr/java/jdk1.8.0_111/jre
PATH=$PATH:$JAVA_HOME/bin:$JRe_HOME/bin:$TOMCAT_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH

# Second parameter : project url   |   PRO_URL expression
#PRO_URL=/project/py/pyapp2018-07-25

# The file stores the startup path
PRO_URL=/project/py/py_path

function initialize(){
    # 判断PRO_URL文件是否存在,不存在就新建这么一个文件,用于当每次调用第二个参数启动时都会随着更改文件里面的内容
    if [ ! -f "$PRO_URL" ]; then
        touch $PRO_URL
        chmod 777 $PRO_URL
    fi
    # 取项目的待执行目录
    readFile=`cat $PRO_URL`
    if [ "$readFile" == "" ];then
        echo "-----> The read file was empty and failed to start <-----"
        # echo "" > $PRO_URL
        # echo "$1 cleaned up."
    else
        echo "-----> The project is being restarted <-----"
        cd $readFile
        # 检查8088 8089 8090端口是否启动状态
        process1=`netstat -an|grep LISTEN|grep :8088`
        # 如果端口检查为空就重启8088服务
        if [ "$process1" == "" ];then
            fStart 8088
            echo "-----> 8088 Port started successfully <-----"
        else
            echo "-----> The 8088 port is running <-----"
        fi
        process2=`netstat -an|grep LISTEN|grep :8089`
        # 如果端口检查为空就重启8089服务
        if [ "$process2" == "" ];then
            fStart 8089
            echo "-----> 8089 Port started successfully <-----"
        else
            echo "-----> The 8089 port is running <-----"
        fi
        process3=`netstat -an|grep LISTEN|grep :8090`
        # 如果端口检查为空就重启8090服务
        if [ "$process3" == "" ];then
            fStart 8090
            echo "-----> 8090 Port started successfully <-----"
        else
            echo "-----> The 8090 port is running <-----"
        fi
    fi

}

# nohup也可新创一个函数
fStart()
{
    pid=`lsof -F p  -i:$1 | cut -b 2-`
    if [ "$pid" != "" ];then
        kill -9 $pid;
        nohup java -Xmx24000m  -Xss10m -jar py-0.0.1-SNAPSHOT-exec.jar --server.port=$1  &
        echo "-----> $1 Port occupancy forced offline and start again <-----"
    else
        nohup java -Xmx24000m  -Xss10m -jar py-0.0.1-SNAPSHOT-exec.jar --server.port=$1  &
        echo "-----> The $1 port starting success <-----"
    fi
}

fStop()
{
    pid=`lsof -F p  -i:$1 | cut -b 2-`
    if [ "$pid" != "" ];then
        kill -9 $pid;
        echo "-----> $1 Port Stop success <-----"
    else
        echo "-----> The $1 port Has been discontinued <-----"
    fi
}

case "$1" in
     start)
        # 如果$1等于空,这种情况下大多是服务器重启
        if [ "$2" == "" ];then
            initialize
            echo "-----> Restart through boss Ben,Verification is recommended. <-----"
        else
            # 判断2是否目录为空
            if [ ! -d "$2" ];then
                echo "-----> The specified file directory does not exist <-----"
            else
                cd $2
                readFile=`cat $PRO_URL`
                if [ "$2" != "$readFile" ];then
                    echo "" > $PRO_URL
                    echo "$2" > $PRO_URL
                fi
                if [ "$3" == "" ];then
                    #nohup java -Xmx24000m  -Xss10m -jar py-0.0.1-SNAPSHOT-exec.jar --server.port=8088  &
                    #nohup java -Xmx24000m  -Xss10m -jar py-0.0.1-SNAPSHOT-exec.jar --server.port=8089  &
                    #nohup java -Xmx24000m  -Xss10m -jar py-0.0.1-SNAPSHOT-exec.jar --server.port=8090  &
                    fStart 8088
                    fStart 8089
                    fStart 8090
                else
                    fStart $3
                fi
            fi
        fi
     ;;

     stop)
        # 停止不需要传路径 2就代表待停端口
        if [ "$2" == "" ];then
            # 这儿:当start启动没有成功执行完时,执行stop会失败。
            # 8088 8089 8090端口全部停止
            fStop 8088
            fStop 8089
            fStop 8090
        else
            # 指定性端口停止
            fStop $2
        fi
        #process=`netstat -an|grep LISTEN|grep :8088`
        #process = `lsof -i:8088`
        #if [ "$process" != "" ];then
        #    echo "JAR8088 is running"
        #else
        #    echo "JAR8088 is not running"
        #fi
     ;;

     *)
        # 如果$1等于空,这种情况下大多是服务器重启
        #if [ "$1" == "" ];then
        #    initialize
        #fi
        echo " ---> service py_start [start|stop] [start:project path] [8088|8089|8090] <---"
     ;;

esac

===========================END===============================

* 注:

1. 需优化,当start刚执行就执行stop再执行start会出问题。

2. 第二个参数是版本控制jar的指定文件夹路径

  • 作者:Love丶TG
  • 原文链接:https://blog.csdn.net/qq_20696007/article/details/81987879
    更新时间:2022年6月5日08:25:34 ,共 4098 字。