Linux 運(yùn)行jar包的幾種方式

一、Linux 運(yùn)行jar包的幾種方式

  • 方式一: java -jar xxx.jar

最常用的啟動jar包命令,特點(diǎn):當(dāng)前ssh窗口被鎖定,可按CTRL + C打斷程序運(yùn)行,或直接關(guān)閉窗口,程序退出

  • 方式二: java -jar xxx.jar &

&代表在后臺運(yùn)行 ,ctrl+c 后程序也會繼續(xù)運(yùn)行

  • 方式三: nohup java -jar xxx.jar &

nohup 即 no hang up 不掛斷 ,關(guān)閉SSH客戶端連接,程序不會中止運(yùn)行

缺省情況下該作業(yè)的所有輸出被重定向到nohup.out的文件中,如何讓輸出的內(nèi)容重定向到指定的文件呢?

  • 方式四:nohup java -jar xxx.jar >aaa.log &

command >out.file 是將commandd 輸出重定向到out.flie文件,即輸出內(nèi)容不打印到屏幕上,而是輸出到out.file文件中

  • 方式五:nohup java -jar spring-boot-demo.jar > springboot.log 2>&1 &
image.png
  • 方式六:nohup java -jar spring-boot-demo.jar > /dev/null 2>&1 &

不輸出日志

二、nohup 和 &

使用&后臺運(yùn)行程序:
  • 結(jié)果會輸出到終端
  • 使用Ctrl + C,程序免疫
  • 關(guān)閉session,程序關(guān)閉
使用nohup運(yùn)行程序:
  • 結(jié)果默認(rèn)會輸出到nohup.out
  • 使用Ctrl + C,程序關(guān)閉
  • 關(guān)閉session,程序免疫

平日線上經(jīng)常使用nohup&配合來啟動程序

三、> /dev/null 2>&1

  • > 標(biāo)準(zhǔn)重定向符,允許我們創(chuàng)建一個(gè) 0KB 的空文件。它通常用于重定向一個(gè)命令的輸出到一個(gè)新文件中。在沒有命令的情況下使用重定向符號時(shí),它會創(chuàng)建一個(gè)文件。

  • /dev/null 可以看作黑洞,等價(jià)于一個(gè)只寫文件。所有寫入它的內(nèi)容都會永遠(yuǎn)丟失,嘗試從它那兒讀取內(nèi)容則什么也讀不到。也就是將所有產(chǎn)生的日志將被丟棄

  • 2>&1 符號>&是一個(gè)整體代表將標(biāo)準(zhǔn)錯(cuò)誤2重定向到標(biāo)準(zhǔn)輸出1,如果是2>1的話,代表將標(biāo)準(zhǔn)錯(cuò)誤輸出到文件1,而不是重定向到標(biāo)準(zhǔn)輸出流

先了解下1和2在Linux中代表什么

當(dāng)Linux執(zhí)行一個(gè)程序時(shí),會自動打開三個(gè)流

0:標(biāo)準(zhǔn)輸入流(默認(rèn)是鍵盤)
1:標(biāo)準(zhǔn)輸出流(默認(rèn)是屏幕)
2:標(biāo)準(zhǔn)錯(cuò)誤流(默認(rèn)是屏幕)

名稱 代碼 操作符 java中表示 Linux中文件描述符
標(biāo)準(zhǔn)輸入(stdin) 0 < 或 << System.in /dev/stdin -> /proc/self/fd/0 -> /dev/pts/0
標(biāo)準(zhǔn)輸出(stdout) 1 >, >>, 1> 或 1>> System.out /dev/stdout -> /proc/self/fd/1 -> /dev/pts/0
標(biāo)準(zhǔn)錯(cuò)誤輸出(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都理解是一個(gè)指針,然后來看上面的語句就是這樣的:

本來1----->屏幕 (1指向屏幕)
執(zhí)行>log后, 1----->log (1指向log)
執(zhí)行2>&1后, 2----->1 (2指向1,而1指向log,因此2也指向了log)

再來分析下nohup java -jar app.jar 2>&1 >log &
本來1----->屏幕 (1指向屏幕)
執(zhí)行2>&1后, 2----->1 (2指向1,而1指向屏幕,因此2也指向了屏幕)
執(zhí)行>log后, 1----->log (1指向log,2還是指向屏幕)
所以這就不是我們想要的結(jié)果。

每次都寫">log 2>&1"太麻煩,能簡寫嗎?可以簡寫成 &>log>&log

nohup java -jar app.jar 2>&1 >log & 簡寫成:nohup java -jar app.jar &>log &

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容