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即可

參考資料:

xargs命令詳解 http://www.ruanyifeng.com/blog/2019/08/xargs-tutorial.html

https://blog.csdn.net/wngpenghao/article/details/83022185


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM