天天看點

java spring啟動和終止_springBoot jar啟動以停止腳本參數詳解

一、啟動腳本

Springboot 項目打成jar包後,在Linux環境上一般有如下幾種啟動方式:

1. “java -jar XXX.jar ”

指令結尾沒有 “&” ,表示在目前ssh視窗,可按CTRL + C打斷程式運作,或者直接關閉視窗,則程式直接退出

2. java -jar app.jar &

表示在當視窗關閉時,程式才會中止運作。&代表讓該指令在背景執行。

3. nohub 方式啟動:

& 表示背景運作,但是當使用者推出終端或挂起的時候,指令也跟着退出。而nohub的意思就是 no hung up (不挂起),指令永久的執行下去,和使用者終端沒有關系。

nohup java -Dfile.encoding=UTF-8 -Xms2000m -Xmx2000m -jar app.jar >/dev/null 2>&1 &

參數詳解:nohub : 不挂斷地運作指令-Dfile.encoding=UTF-8: 字元集(可以不用設定)-Xms2000m:啟動配置設定記憶體-Xmx2000m:運作最大記憶體-jar :jar方式啟動

/dev/null >2>& 1 : 一般情況下是指定日志輸出位置例如:nohup java -jar XXX.jar > Log.log &

标準輸入檔案(stdin):stdin的檔案描述符為0,Unix程式預設從stdin讀取資料。标準輸出檔案(stdout):stdout 的檔案描述符為1,Unix程式預設向stdout輸出資料。标準錯誤檔案(stderr):stderr的檔案描述符為2,Unix程式會向stderr流中寫入錯誤資訊。“>dev/null 2>&1” :将 标準錯誤 (stderr) 2 重定向到 (stdout ) 1 最終輸出到 Log.log 中

dev/null 是一個特殊的檔案,寫入到它的内容都會被丢棄;如果嘗試從該檔案讀取内容,那麼什麼也讀不到。但是 /dev/null 檔案非常有用,将指令的輸出重定向到它,會起到"禁止輸出"的效果。

最後說說為什麼要不想輸出檔案了還需需要這樣做:nohub 指令預設日志的情況下回預設将日志輸出到 nohup.out 中是以要指定日志,但是不想輸出日志的情況下就可以如上所做。可以建立 start.sh 檔案,然後将nohub 啟動指令寫入即可。

二、停止腳本

ps -ef | grep app.jar | grep -v grep | awk '{print $2}' | xargs kill

指令詳解:ps -ef | grep app.jar這不不用多說,就是查找app.jar 這個程序的相關資訊。其中 | 是 管道符,意思就是上一條指令的輸出作為下一條指令的參數。也就是說這個指令其實是兩條指令。ps -ef 是第一步代表查找所有程序grep app.jar 第二步代表過濾出所有含有app.jar的程序

舉個例子就是:

ps -ef|grep app.jar

root      6999     1  0 Nov04 ?        00:06:23 java -Dfile.encoding=UTF-8 -Xms2000m -Xmx2000m -jar app.jar

root      8474 29928  0 10:55 pts/1    00:00:00 grep --color=auto app.jar

但是為什麼會出現兩個程序呢,其中一個是 java 另一個是grep.其實在執行grep app.jar 的時候,本身也是一個程序,并且包含了app.jar 關鍵字,是以篩選的時候就顯示出來了。其實不管有沒有app.jar 這個程序,都會顯示出來,随便編一個aaaa.jar 執行:

ps -ef|grep aaa.jar

root     14003 29928  0 11:04 pts/1    00:00:00 grep --color=auto aaa.jar

殺掉程序,需要知道程序号,目前有兩個程序,就需要過濾掉grep這個程序。grep -v grep :就是去除去包含grep的程序 。與上面的指令通過 | 連接配接後的執行結果如下:

ps -ef | grep app.jar | grep -v grep

root      6999     1  0 Nov04 ?        00:06:24 java -Dfile.encoding=UTF-8 -Xms2000m -Xmx2000m -jar app.jar

可以看到已經将java程序過濾出來了。awk '{print $2}' 就是根據分割符列印出第二個參數,這裡就是程序号。

xargs kill 中, xargs 是指令的作用,是将标準輸入轉為指令行參數。有的指令是不支援将标準輸入作為參數的,也就是不支援 | 作為輸出的。上面的grep 支援。什麼是标準輸入不多說了。這個指令也就可以看做前一步不是輸入了程序号麼,但是不能通過 | 傳遞給 kill 這個指令,隻能通過xargs 轉化一下。

腳本執行如果提權限問題 執行 chmod u+x *.sh即可

參考資料: