這里的linux退出,指的是linux(退出管理工具),非注銷登陸。
java -jar xxx.jar 即刻啟動jar包,能看到輸出的日志。linux 退出后會關閉該執行。
java -jar xxx.jar & 即刻在后台啟動jar包,看不到到輸出的日志。linux 退出后會關閉該執行。
如何保證jar包執行后,退出linux,jar包不會隨之關閉,導致項目無法訪問
此處我們需要使用到nohup
nohup
用途:不掛斷的運行命令
語法:nohup Command [ Arg … ] [ & ]
&
用途:在后台運行
一般兩個一起用
nohup command &
eg:nohup java -jar xxx.jar >log.txt &
。這種方式會在jar目錄下生成log.txt。這里我們先查看當前項目是否還在運行:ps -ef | grep xxx.jar
,可以看到如下結果(例圖):
grep 類型 的是默認的,我們主要處理的是java類型的,執行kill -9 11858
再次執行ps -ef | grep xxx.jar就只能查到grep 類型的了。
后台啟動時 使用 nohup java -jar xxx.jar >/log/log.txt 2>&1 &
第一個>后面是你的入職輸出路徑
第二個> 后面的 2>&1 是將標准出錯重定向到標准輸出,這里的標准輸出已經重定向到了out.file文件,即將標准出錯也輸出到out.file文件中。
最后一個& , 是讓該命令在后台執行。
對 於& 1 更准確的說應該是文件描述符 1,
1 一般代表的就是STDOUT_FILENO,實際上這個操作就是一個dup2(2)調用.
他標准輸出到all_result ,然后復制標准輸出到文件描述符2(STDERR_FILENO),
其后果就是文件描述符1和2指向同一個文件表項,也可以說錯誤的輸出被合並了.
其中0 表示鍵盤輸入 1表示屏幕輸出 2表示錯誤輸出.把標准出錯重定向到標准輸出,
然后扔到/log 下面去。
/log/log.txt 2>&1 &
是將command的輸出重定向到/log/log.txt ,即輸出的內容不會打印到當前屏幕,而是輸出到了/log/log.txt 文件中。
標准輸入文件(stdin):stdin的文件描述符為0,Unix程序默認從stdin讀取數據。
標准輸出文件(stdout):stdout 的文件描述符為1,Unix程序默認向stdout輸出數據。
標准錯誤文件(stderr):stderr的文件描述符為2,Unix程序會向stderr流中寫入錯誤信息。
屏蔽輸出,起到禁止輸出作用:/dev/null 是一個特殊的文件,寫入到它的內容都會被丟棄;
如果嘗試從該文件讀取內容,那么什么也讀不到。但是 /dev/null 文件非常有用,將命令的輸出重定向到它,會起到"禁止輸出"的效果。
“> /log/log.txt 2>&1” :表示將 stdout 和 stderr 合並后重定向到 /log/log.txt
啟動指派給指定的端口:
nohup java -jar xxx.jar --server.port:80>/log/log.txt 2>&1 &