日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

現在JAVA Web開發一般都是用Springboot框架,部署應用時使用Jar包(Java ARchive),也就是Java歸檔文件,而不是使用War包(打包格式的Java web工程)。

Jar包程序部署后如何啟動和停止

War包結構

Jar包和War包的主要區別就在于Jar包內部已經集成了Tomcat服務器,War包部署還需要先安裝一個Tomcat服務。用jar部署java服務更加方便,也是大勢所趨。在linux服務器上部署完Jar包程序以后,該如何啟動服務和停止服務呢?

Jar包的啟動

在主機上先配置好Java的環境變量,之后就可以用java命令啟動Jar包:

java -jar xxx.jar

在啟動jar包的時候,通常需要設置很多與內存有關的參數,要詳細了解Java啟動內存參數,可以閱讀前文《Java面試常見問題:JVM內存異常及內存參數設置》。常用的內存配置參數包括:

  • -XX: MetapaceSize 設置元空間大小的初始值;
  • -XX:MaxMetaspaceSize 設置元空間大小的最大值;
  • -Xms 設置堆內存的初始值;
  • -Xmx 設置堆內存的最大值;
  • -Xmn 設置新生代的大小;
  • -Xss 設置棧區的大小;
  • -XX:SurvivorRatio 設置新生代中Eden區域和Survivor區域的比例,默認為8
  • -XX:+UseConcMarkSweepGC 設置垃圾回收器為并發標記清除(Concurrent Mark Sweep)垃圾回收器。

這樣在Jar包的啟動命令中要把所有參數都配置好,可要寫不少字。

java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC xxxService.jar

為了避免每次啟動都打這么多字,我們可以把這一長串啟動命令放在Shell腳本中運行。要啟動Jar包服務只需要運行腳本就行。

Jar包啟動腳本

Shell 是一個用 C 語言編寫的程序,它是用戶使用 Linux/Unix系統的橋梁,有好多種不同版本的Shell。Ken Thompson 開發的 sh Shell是第一個 Unix Shell。

Jar包程序部署后如何啟動和停止

美國計算機科學學者Kenneth Lane Thompson,1983年圖靈獎得主,C語言前身B語言的作者,Unix發明人之一

在Linux上,最常用的Shell程序就是 bash。bash保持了對 sh Shell 的兼容性,是各種 Linux 發行版默認配置的 shell。下面我們就看一下如何用shell腳本實現Jar包啟動。

#!/bin/sh
AppDIR=`pwd`
PIDFILE=$APPDIR/xxxService.pid
if [ -f "$PIDFILE" ] && kill -0 $(cat "$PIDFILE"); then
echo "xxxService is already running..."
exit 1
fi
nohup java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC xxxService.jar > out.file 2>&1 & echo $! > $PIDFILE
echo "start xxxService success..."

第一行腳本是說明shell程序所在的位置,基本上Linux系統都是一樣的。

第二行腳本是用pwd指令獲取當前路徑。通常我們把這個shell腳本和Jar包文件會放在一個路徑下,要特別注意pwd上面的不是單引號,而是鍵盤左上角的“點號”。APPDIR就是腳本所在的當前路徑了。

第三行腳本定義了變量PIDFILE,指向文件名xxxService.pid,這個文件就是用來記錄Jar包啟動后的進程ID。這樣將來就可以用進程ID來關閉Jar包服務了。

第四行腳本是判斷是否xxxService程序已經運行了。

  • [-f "$PIDFILE"]是查詢pid文件是否存在。
  • cat "$PIDFILE"是打印pid文件內容,也就是進程ID。
  • kill -0 pid的意思并不是要殺死進程,而是讓系統來對進程進行檢查,如果進程不存在,kill -0會報錯。

第5行到第7行腳本的含義:如果pid文件存在且對應進程也存在,那么說明Jar包已經啟動了,不需要再重新啟動,腳本退出運行。

如果Jar包尚未啟動,則運行第8行腳本。省略掉Java啟動內存設置參數,就是下面這樣:

nohup java -jar xxxService.jar > out.file 2>&1 & echo $! > $PIDFILE

  • nohup 意思是不掛斷運行命令,當賬戶退出或終端關閉時,程序仍然運行。
  • >outfile 代表輸出重定向,程序運行時的標準輸出內容都會打印到out.file上。
  • 2>&1 就是將標準錯誤重定向到標準輸出。標準輸出已經到了out.file上,因此錯誤也會輸出到這個文件上面。如果不希望記錄標準輸出和錯誤,可以重定向到/dev/null上,因為 /dev/null 是一個不存在的設備,從這里什么也讀不出來。
  • &代表在后臺運行,echo $! > $PIDFILE 則是把進程ID輸出到pid文件上。

第8行腳本執行成功后,第9行腳本打印成功。另外我們還可以在當前目錄下發現多了一個xxxService.pid文件。

Jar包停止運行

那么要如何關掉正在執行的Java進程呢,通常可以運行:

ps aux | grep xxxService

這句指令會列出所有帶有xxxService字樣的進程,在其中我們找到要關掉的進程ID,隨后就用kill -9 pid可以殺死進程。kill -9 發送SIGKILL信號給進程,告訴進程,你被終結了,請立刻退出。

不過有了啟動腳本作為基礎,我們不需要再費力去找進程ID。結合啟動腳本,我們還可以設計下面這樣一個停止腳本。

#!/bin/sh
APPDIR=`pwd`
PIDFILE=$APPDIR/xxxService.pid
if [ ! -f "$PIDFILE" ] || ! kill -0 "$(cat "$PIDFILE")"; then
echo "xxxService not running..."
else
echo "stopping xxxService..."
PID="$(cat "$PIDFILE")"
kill -9 $PID
rm "$PIDFILE"
echo "...xxxService stopped"
fi

這個停止腳本和啟動腳本類似,這里就不再逐行解釋了,如果大家有什么問題,可以在評論區留言。

分享到:
標簽:Jar
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定