對於Spring Boot導出的jar包程序
當連接的遠程服務器執行的時候,一旦關閉了當前終端,程序也被迫停止運行了。這顯然是不行的
我想要的是讓它常駐後臺執行,不受啓動其終端關閉與否的影響。
解決辦法
在jar包文件所在的目錄執行以下命令:
nohup java -jar springboot-0.0.1-SNAPSHOT.jar >nohup 2>&1 &
nohup: 不掛斷的執行命令,忽略所有的掛斷信號。 運行後臺命令 最後加 &
在jar目錄下會生成一個nohup.out文件,默認的log輸出到這裏了。
命令解釋
以上命令是不輸出啓動日誌的,運行後會只輸出一個運行的進程號。
想要輸出啓動日誌可以這樣:
java -jar xx.jar > log.file 2>&1 &
這裏啓動信息就輸出到了日誌文件上,注意的是log文件需要先創建chmod授權
可以給日誌一個777授權,測試階段無所謂:
chmod 777 -R /home/logs
2>&1含義
& 1 更準確的說是文件描述符 1,
而1 一般代表的就是STDOUT_FILENO,實際上這個操作就是一個dup2(2)調用
.他標準輸出到all_result ,然後複製標準輸出到文件描述符2(STDERR_FILENO), 其後果就是文件描述符1和2指向同一個文件表項,也可以說錯誤的輸出被合併了
.其中0表示鍵盤輸入 1表示屏幕輸出 2表示錯誤輸出.把標準出錯重定向到標準輸出,然後扔到/DEV/NULL下面去。通俗的說,就是把所有標準輸出和標準出錯都扔到垃圾桶裏面。
值 | 含義 |
---|---|
0 | 標準輸入(一般是鍵盤) |
1 | 標準輸出(一般是顯示屏,準確的說是用戶終端控制檯) |
2 | 標準錯誤(出錯信息輸出) |
最後一個& , 是讓該命令在後臺執行
查看進程
查看全部進程
ps -ef
查看java進程
ps -ef |grep java
如圖所示:
第一個進程是我jar包啓動進程,第二個是java的查找進程不用管
前面的那個root是當前用戶,第一個數字403是當前進程號
殺死當前進程
kill -9 403
只查詢當前jar包程序的進程號:
pgrep -f 'java -jar springboot-0.0.1-SNAPSHOT.jar'
如圖所示: