jar包的各種啟動(dòng)方式超詳細(xì)總結(jié)
簡介:該文總結(jié)了常歸的jar包的啟動(dòng)方式,并分析各種啟動(dòng)方式的區(qū)別。該文所有場景均是以命令直接操作終端的結(jié)果,通過腳本執(zhí)行以下命令會(huì)略有區(qū)別,不在本次討論范圍。
一、各種啟動(dòng)方式
1.java -jar
# 例子 java -jar test.jar
這是最簡單的啟動(dòng)方式,同時(shí)弊端也是很多的。
弊端1:exit 退出終端會(huì)導(dǎo)致java進(jìn)程中斷。
弊端2:ctrl+c 退出啟動(dòng)展示頁會(huì)導(dǎo)致java進(jìn)程中斷。
弊端3:直接關(guān)閉終端會(huì)導(dǎo)致java進(jìn)程中斷(啟動(dòng)時(shí)和啟動(dòng)完關(guān)閉都會(huì)導(dǎo)致java進(jìn)程終端)。
弊端4:控制臺(tái)日志不打?。ㄟ@個(gè)可以不算弊端吧,其實(shí)很多場景不需要這個(gè)日志,這里姑且算是吧)
所以該命令是不能直接使用的。下面是演示使用ctrl+c退出啟動(dòng)展示頁后程序進(jìn)行自動(dòng)中斷的截圖:
從截圖中可以看到,當(dāng)使用ctrl+c時(shí),終端會(huì)終止剛剛使用java -jar啟動(dòng)的進(jìn)程,所以導(dǎo)致了java進(jìn)程的中斷。
2.java -jar test.jar &
# 例子 java -jar test.jar &
可以看到這種啟動(dòng)方式是多了&,&的作用是讓程序可以以后臺(tái)模式運(yùn)行,這樣我們使用ctrl+c,或者exit退出啟動(dòng)頁面時(shí)程序不會(huì)被終止,但是關(guān)閉終端會(huì)導(dǎo)致程序退出,無論是程序啟動(dòng)時(shí)直接關(guān)閉終端還是程序啟動(dòng)完畢在關(guān)閉,都會(huì)導(dǎo)致程序異常終止,總結(jié)如下:
弊端1:直接關(guān)閉終端會(huì)導(dǎo)致java進(jìn)程中斷(啟動(dòng)時(shí)和啟動(dòng)完關(guān)閉都會(huì)導(dǎo)致java進(jìn)程終端)。
弊端2:控制臺(tái)日志不打?。ㄟ@個(gè)可以不算弊端吧,其實(shí)很多場景不需要這個(gè)日志,這里姑且算是吧)
下面是使用ctrl+c退出啟動(dòng)頁的結(jié)果,可以發(fā)現(xiàn)此時(shí)程序還在運(yùn)行。
3.nohup java -jar test.jar
# 例子 nohup java -jar test.jar
該命令相當(dāng)于第一個(gè)場景增加了nohup命令,nohup命令其實(shí)就是為了指定輸出文件的,用在這里自然就是指定java的輸出了。nohup默認(rèn)會(huì)將文件打印在當(dāng)前文件夾下的nohup.out文件中,若是該文件權(quán)限不足,則會(huì)將日志輸出到$HOME/nohup.out。值得一提的事,這里的輸出接收的都是java控制臺(tái)的輸出。同時(shí)第一個(gè)場景擁有的弊端除了不打印控制臺(tái)日志他都有。所以這個(gè)命令我們一般也不用。
弊端1:exit 退出終端會(huì)導(dǎo)致java進(jìn)程中斷。
弊端2:ctrl+c 退出啟動(dòng)展示頁會(huì)導(dǎo)致java進(jìn)程中斷。
弊端3:直接關(guān)閉終端會(huì)導(dǎo)致java進(jìn)程中斷(啟動(dòng)時(shí)和啟動(dòng)完關(guān)閉都會(huì)導(dǎo)致java進(jìn)程終端)。
【這里不重復(fù)驗(yàn)證了】
4.nohup java -jar test.jar &
# 例子 nohup java -jar test.jar &
與上個(gè)命令相比增加了 &,作用可以類比第二個(gè)場景,然后增加了日志輸出。那是不是說還是有“關(guān)閉終端會(huì)導(dǎo)致程序終止”這個(gè)弊端呢,答案是否,使用這個(gè)命令關(guān)閉終端(無論是啟動(dòng)時(shí)還是啟動(dòng)完畢)都不會(huì)終止程序(原因是因?yàn)殛P(guān)閉終端這里其實(shí)關(guān)閉的是nohup的命令層級(jí),對(duì)java程序已經(jīng)起不到影響,linux肯定對(duì)nohup命令做了特殊處理)。
所以說以上所有的弊端,這個(gè)命令已經(jīng)沒有了,啟動(dòng)程序使用這個(gè)命令也是完全沒有問題的。
弊端1:日志定向輸出當(dāng)前文件夾下的nohup.out(與下面幾個(gè)命令相比,姑且算是弊端吧)
5.nohup java -jar test.jar > ./info.log &
# 例子 nohup java -jar test.jar > ./info.log &
該命令沒有弊端,與上一個(gè)場景的區(qū)別是會(huì)將日志打印到指定的info.log下面。不過打印方式是覆蓋。也就是說每次啟動(dòng)以后,都會(huì)將之前的日志覆蓋
6. nohup java -jar test.jar >> ./info.log &
# 例子 nohup java -jar test.jar >> ./info.log &
該命令沒有弊端,與上一個(gè)場景的區(qū)別是會(huì)將日志打印到指定的info.log下面。不過打印方式是拼接。也就是說每次啟動(dòng)以后,都會(huì)將本次的日志拼接到原日志之后進(jìn)行輸出,這里日志因?yàn)槭强刂婆_(tái)日志,一般沒必要拼接
7. nohup java -jar test.jar >> /dev/null &
# 例子 nohup java -jar test.jar >> /dev/null &
這個(gè)命令是將日志輸出到/dev/null,/dev/null是linux系統(tǒng)里的黑洞,其實(shí)可以理解為垃圾桶,相當(dāng)于把日志扔了不要了,其他就沒什么區(qū)別了。
【這幾個(gè)命令就不重復(fù)測試了】
二、總結(jié)
常用的命令其實(shí)就三個(gè),根據(jù)需要選擇即可
# 需要打印控制臺(tái)日志,無需保留之前的日志信息 nohup java -jar test.jar > ./info.log & # 需要打印控制臺(tái)日志,需要保留之前的日志信息 nohup java -jar test.jar >> ./info.log & # 不需要打印控制臺(tái)日志 nohup java -jar test.jar >> /dev/null &
到此這篇關(guān)于jar包的各種啟動(dòng)方式超詳細(xì)總結(jié)的文章就介紹到這了,更多相關(guān)jar包啟動(dòng)方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java調(diào)用SQL腳本執(zhí)行常用的方法示例
這篇文章主要給大家介紹了關(guān)于Java調(diào)用SQL腳本執(zhí)行常用的方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-04-04使用StringRedisTemplate操作Redis方法詳解
這篇文章主要為大家介紹了使用StringRedisTemplate操作Redis方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08spring?mybatis環(huán)境常量與枚舉轉(zhuǎn)換示例詳解
這篇文章主要為大家介紹了spring?mybatis環(huán)境常量與枚舉轉(zhuǎn)換示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06Json字符串與Object、List、Map的互轉(zhuǎn)工具類
今天小編就為大家分享一篇關(guān)于Json字符串與Object、List、Map的互轉(zhuǎn)工具類,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12Spring Boot 2.x 把 Guava 干掉了選擇本地緩存之王 Caffeine(推薦)
這篇文章主要介紹了Spring Boot 2.x 把 Guava 干掉了選擇本地緩存之王 Caffeine,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01java數(shù)據(jù)結(jié)構(gòu)之搜索二叉樹
這篇文章主要為大家詳細(xì)介紹了java數(shù)據(jù)結(jié)構(gòu)之搜索二叉樹,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01IntelliJ IDEA 好用插件之a(chǎn)nalyze inspect code詳解
這篇文章主要介紹了IntelliJ IDEA 好用插件之a(chǎn)nalyze inspect code的相關(guān)知識(shí),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-12-12windows環(huán)境下java開發(fā)工具maven的安裝教程圖解
Maven是一個(gè)項(xiàng)目管理和綜合工具。Maven提供了開發(fā)人員構(gòu)建一個(gè)完整的生命周期框架。這篇文章主要介紹了windows環(huán)境下java開發(fā)工具maven的安裝,非常不錯(cuò)對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07Mybatis實(shí)現(xiàn)傳入多個(gè)參數(shù)的四種方法詳細(xì)講解
這篇文章主要介紹了Mybatis實(shí)現(xiàn)傳入多個(gè)參數(shù)的四種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01