一、Windows
環境
找到jar
包的位置;
按shift
鍵,點擊鼠標右鍵,選中在此處打開PowerShell窗口
;
此時進入命令行工具 輸入java -jar .\java_web-0.0.1-SNAPSHOT.jar
(注意空格)。
二、Linux
環境
2.1 方式一
java -jar XXX.jar
特點:當前ssh
窗口被鎖定,可按CTRL + C
打斷程序運行,或直接關閉窗口,程序退出。
2.2 方式二
java -jar XXX.jar &
&
代表在后臺運行。
特定:當前ssh
窗口不被鎖定,但是當窗口關閉時,程序中止運行。
2.3 方式三
nohup java -jar XXX.jar &
nohup
意思是不掛斷運行命令,當賬戶退出或終端關閉時,程序仍然運行。
當用nohup
命令執行作業時,缺省情況下該作業的所有輸出被重定向到nohup.out
的文件中,除非另外指定了輸出文件。
2.4 方式四
nohup java -jar XXX.jar >temp.txt &
解釋下>temp.txt
command >out.file
command >out.file
是將command
的輸出重定向到out.file
文件,即輸出內容不打印到屏幕上,而是輸出到out.file
文件中。
2.5 方式五
nohup java -jar XXX.jar > springboot.log 2>&1 &
2.6 方式六
nohup java -jar spring-boot-demo.jar > /dev/null 2>&1 &
不輸出日志。
三、nohup
和&
使用&
后臺運行程序:
-
結果會輸出到終端
-
使用
Ctrl + C
,程序免疫 -
關閉
session
,程序關閉
使用nohup
運行程序:
-
結果默認會輸出到
nohup.out
-
使用
Ctrl + C
,程序關閉 -
關閉
session
,程序免疫
平日線上經常使用nohup
和&
配合來啟動程序。
四、> /dev/null 2>&1
-
>
標準重定向符,允許我們創建一個0KB
的空文件。它通常用于重定向一個命令的輸出到一個新文件中。在沒有命令的情況下使用重定向符號時,它會創建一個文件。 -
/dev/null
可以看作黑洞,等價于一個只寫文件。所有寫入它的內容都會永遠丟失,嘗試從它那兒讀取內容則什么也讀不到。也就是將所有產生的日志將被丟棄。 -
2>&1
符號>&
是一個整體代表將標準錯誤2重定向到標準輸出1,如果是2>1
的話,代表將標準錯誤輸出到文件1,而不是重定向到標準輸出流。
先了解下1和2在Linux
中代表什么?
當Linux
執行一個程序時,會自動打開三個流:
-
0:標準輸入流(默認是鍵盤)
-
1:標準輸出流(默認是屏幕)
-
2:標準錯誤流(默認是屏幕)
名稱 | 代碼 | 操作符 | java 中表示 | Linux 中文件描述符 |
---|---|---|---|---|
標準輸入(stdin ) | 0 | < 或<< | System.in | /dev/stdin -> /proc/self/fd/0 -> /dev/pts/0 |
標準輸出(stdout ) | 1 | > , >> ,1> 或1>> | System.out | /dev/stdout -> /proc/self/fd/1 -> /dev/pts/0 |
標準錯誤輸出(stderr ) | 2 | 2> 或2>> | System.err | /dev/stderr -> /proc/self/fd/2 -> /dev/pts/0 |
從上表看出,平常使用的echo 'hello' > a.log
可以寫成echo 'hello' 1> a.log
為什么2>&1
要放在后面?
如下一條shell
命令nohup java -jar app.jar >log 2>&1 &
我們不妨把1和2都理解是一個指針,然后來看上面的語句就是這樣的:
本來1----->屏幕 (1指向屏幕)
執行>log
后, 1----->log
(1指向log
)
執行2>&1
后, 2----->1 (2指向1,而1指向log
,因此2也指向了log
)
再來分析下nohup java -jar app.jar 2>&1 >log &
本來1----->屏幕 (1指向屏幕)
執行2>&1
后, 2----->1(2指向1,而1指向屏幕,因此2也指向了屏幕)
執行>log
后, 1----->log
(1指向log
,2還是指向屏幕)
所以這就不是我們想要的結果。
每次都寫>log 2>&1
太麻煩,能簡寫嗎?可以簡寫成&>log
或>&log
nohup java -jar app.jar >log 2>&1 &
簡寫成:nohup java -jar app.jar &>log &