1. 程式人生 > >Spring boot專案打包成jar在linux環境下設定開機自啟動【原創】

Spring boot專案打包成jar在linux環境下設定開機自啟動【原創】

#!/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的指定資料夾路徑

相關推薦

Spring boot專案打包jar在linux環境設定開機啟動原創

#!/bin/bash # The three branches of the scouting program,Add to auto. # chkconfig: 2345 20 80 # description: py-0.0.1-SNAPSHOT-exec.jar #

spring boot專案打包war 並在tomcat上執行的步驟詳解

把spring-boot專案按照平常的web專案一樣釋出到tomcat容器下 一、修改打包形式 在pom.xml裡設定 <packaging>war</packaging> 二、移除嵌入式tomcat外掛 在pom.xml裡找到spri

spring boot專案打包war

1 pom.xml打包方式修改為war 2移除spring boot自帶的tomcat包 3新增serverlet-api(編譯階段需要) <dependency>             <groupId>org.springframework

Spring Boot專案打包docker映象

如何完成這篇教程 像大多數的Spring系列教程 Getting Started guides,你可以從頭開始,完成每一步,也可以跳過已經熟悉的基本構建步驟。 無論哪種方式,你都可以成功。 使用maven構建 首先你得安裝構建指令碼. 你可以使用你喜歡的構建系

IDEA把spring-boot專案打包jar

1.開啟專案,然後右擊專案選中‘Open Module Settings’進入project Structure( 快捷鍵 Ctrl+Shift+Alt+S或者File->Project Stru

spring boot專案打包war並在tomcat上執行的步驟

原文地址:http://m.blog.csdn.net/article/details?id=52515226 把spring-boot專案按照平常的web專案一樣釋出到tomcat容器下 一、修改打包形式 在pom.xml裡設定 <packaging>

spring-boot專案在外部tomcat環境部署

spring-boot預設提供內嵌的tomcat,所以打包直接生成jar包,用java -jar命令就可以啟動。但是,有時候我們更希望一個tomcat來管理多個專案,這種情況下就需要專案是war格式的包而不是jar格式的包。spring-boot同樣提供瞭解決方

在IDEA中如何將Spring boot專案打包可執行的jar包併發布到linux伺服器

這兩年微服務很流行,這裡簡單介紹一下如何將自己使用idea寫的微服務打包成一個可執行的jar包,併發布到linux伺服器的步驟。因為spring boot有內建的tomcat所以一般使用內建的tomcat就可以可,當然也使用外部的tomcat容器。 如有疑問可

ubuntu設定開機啟動

Ubuntu 不像 RedHat 或者 CentOS 那樣有開機啟動配置器 ntsysv 但其也有個很方便的工具:rcconf  不過需要另外安裝 安裝方式:sudo apt-get install rcconf 完成後在命令狀態下輸入:sudo rcconf  即可 執行介面跟紅帽子的 ntsy

IDEAspring boot專案打包war包部署外部tomcat問題

最近需要把開發的spring boot專案打包部署到雲伺服器上,自己先把專案部署到本地的tomcat上執行,結果發現怎麼部署都會報錯。現在特別整理了所有部署流程。以幫助大家解決問題。前提是你得保證你得spring boot專案在idea上能跑起來,並且訪問到伺服器,下面直接重

Spring boot 專案可執行Jar包,及相關注意事項(main-class、缺少 xsd、重複打包依賴)

最近在看 spring boot 的東西,覺得很方便,很好用。對於一個簡單的REST服務,都不要自己部署Tomcat了,直接在 IDE 裡 run 一個包含 main 函式的主類就可以了。 但是,轉念一想,到了真正需要部署應用的時候,不可能通過 IDE 去部署

Spring boot專案打包部署到伺服器

為什麼要把SpringBoot打成war包 正常情況下SpringBoot專案是以jar包的形式,通過命令列: java -jar demo.jar   來執行的,並且SpringBoot是內嵌Tomcat伺服器,所以每次重新啟動都是用的新的Tomcat伺服器。正

spring boot專案配置多個環境

比如我的spring boot專案有開發(dev)、測試(test)、生產(prod)三個環境,需要有三套對應的配置檔案。如下 在專案裡application.yml為主配置檔案,另外三個分別對應

在IDEA中如何將多模組Spring boot專案打包

SpringBoot就是一個內嵌WEB伺服器(tomcat/jetty)可執行程式的框架。 所以開發的web應用不需要作為war包部署到web伺服器中,而是作為一個可執行程式,可執行的jar包部署就可以了。 專案的釋出: 1.修改父模組pom檔案  去掉maven打包

spring boot專案war包

1  pom檔案中將打包形式 jar 修改為war     <packaging>war</packaging> 2 不使用自帶的tomcat <dependency>         <groupId>org.spri

spring boot 專案war包部署到伺服器

      這是spring boot學習的第二篇了,在上一篇已經整合了spring boot專案了,如果還有小夥伴沒有看得可以先去看第一篇        到這裡的小夥伴應該都是會整合基本的spring boot專案 ,並且可以在本地工具上執行訪問了,如果還做不到的,說明你沒有用心哦o( ̄ヘ ̄o#)

Spring Boot通過Profiles實現多環境配置切換

1、在yml中使用pom定義的maven屬性變數 格式:@[email protected] spring: application: name: dream-web-gateway profiles: active: '@[

在Eclipse中如何將spring boot專案的jar包,並且雙擊執行cmd 執行jar包,設定開機啟動

1、如何在eclipse中將spring boot專案打成jar包 1.右擊專案,選擇Run As - Maven clean 2.右擊專案,選擇Run As - Maven install 3.成功後 會在專案的target資料夾下生成jar包 2、直接雙擊執行cm

spring boot 專案打包,配置構建外掛

Spring Boot:jar中沒有主清單屬性 使用Spring Boot微服務搭建框架,在eclipse和Idea下能正常執行,但是在打成jar包部署或者直接使用java -jar命令的時候,提示了xxxxxx.jar中沒有主清單屬性: D:\hu-git\spr

Spring boot應用打包映象放到docker中執行

學習docker,需要把專案打包成映象,所以第一步首先得把專案打成war包,這樣才能丟上去。 打包成war 這一步在傳統java web專案中看起來非常簡單一步,但是Spring boot卻有小許不同。 增加SpringBootServletIni