1. 程式人生 > >Linux連線斷掉時,防止執行的jar包程序死亡(nohup、&命令)

Linux連線斷掉時,防止執行的jar包程序死亡(nohup、&命令)

一)先來了解一下nohup和&命令: 

&

當在前臺執行某個作業時,終端被該作業佔據;可以在命令後面加上& 實現後臺執行。例如:sh test.sh & 
適合在後臺執行的命令有f i n d、費時的排序及一些s h e l l指令碼。在後臺執行作業時要當心:需要使用者互動的命令不要放在後臺執行,因為這樣你的機器就會在那裡傻等。不過,作業在後臺執行一樣會將結果輸出到螢幕上,干擾你的工作。如果放在後臺執行的作業會產生大量的輸出,最好使用下面的方法把它的輸出重定向到某個檔案中:
command  >  out.file  2>&1  & 

這樣,所有的標準輸出和錯誤輸出都將被重定向到一個叫做out.file 的檔案中。

nohup

使用&命令後,作業被提交到後臺執行,當前控制檯沒有被佔用,但是一但把當前控制檯關掉(退出帳戶時),作業就會停止執行。nohup命令可以在你退出帳戶之後繼續執行相應的程序。nohup就是不掛起的意思( no hang up)。該命令的一般形式為:
nohup command &
 

(二)將程序設定成後臺執行

1、在使用 java -jar 命令執行jar包後,Linux伺服器終端連線斷掉,jar包的執行程序也會斷掉,這是我們不希望看到的結果。所以,為了防止程序中斷,可以使用nohup命令讓程序在後臺執行,即使終端連線斷開,也不會對其造成影響。

nohup命令會將桌面輸出改為輸出到“nohup.out”檔案(預設檔案,也可自定義指定輸出檔案)中,相當於是log的作用。

[[email protected] java]# nohup java -jar MelifeTest.jar &

2、Linux下還有一個特殊的檔案/dev/null,它就像一個無底洞,所有重定向到它的資訊都會消失得無影無蹤。這一點非常有用,當我們不需要回顯程式的所有資訊時,就可以將輸出重定向到/dev/null。
如果想要正常輸出和錯誤資訊都不顯示,則要把標準輸出和標準錯誤都重定向到/dev/null, 例如:

[[email protected]

~]# nohup java -jar MelifeTest.jar >/dev/null 2>&1

 3、將錯誤輸出到“黑洞”

[[email protected] java]#  nohup java -jar MelifeTest.jar 2>/dev/null

 4、>/dev/null 2>&1預設情況是1,也就是等同於1>/dev/null 2>&1。意思就是把標準輸出重定向到“黑洞”,還把錯誤輸出2重定向到標準輸出1,也就是標準輸出和錯誤輸出都進了“黑洞” 。

[[email protected] java]#  nohup java -jar MelifeTest.jar >/dev/null 2>&1

5、將錯誤輸出2重定向到標準出書1,也就是螢幕,標準輸出進了“黑洞”,也就是標準輸出進了黑洞,錯誤輸出列印到螢幕  。

(先執行一下第一條命令,再執行第二條,直接執行第二條命令會出現這種情況:按Ctrl+C程序立即死亡)

[[email protected] java]# nohup java -jar MelifeTest.jar &

[[email protected] java]#  nohup java -jar MelifeTest.jar 2>&1 >/dev/null

(三)相關快捷鍵

使用了nohup之後,很多人就這樣不管了,其實這樣有可能在當前賬戶非正常退出或者結束的時候,命令還是自己結束了。所以在使用nohup命令後臺執行命令之後,需要使用exit正常退出當前賬戶,這樣才能保證命令一直在後臺執行。

ctrl + z 
可以將一個正在前臺執行的命令放到後臺,並且處於暫停狀態。

Ctrl+c 
終止前臺命令。

jobs 
檢視當前有多少在後臺執行的命令。 
jobs -l選項可顯示所有任務的PID,jobs的狀態可以是running, stopped, Terminated。但是如果任務被終止了(kill),shell 從當前的shell環境已知的列表中刪除任務的程序標識。

參考博文: 

相關推薦

Linux連線斷掉防止執行jar程序死亡nohup&命令

(一)先來了解一下nohup和&命令:  & 當在前臺執行某個作業時,終端被該作業佔據;可以在命令後面加上& 實現後臺執行。例如:sh test.sh &  適合在後臺執行的命令有f i n d、費時的排序及一些s h e l l指令碼

Linux連線斷掉防止執行jar程序死亡nohup&命令

(一)先來了解一下nohup和&命令:  & 當在前臺執行某個作業時,終端被該作業佔據;可以在命令後面加上& 實現後臺執行。例如:sh test.sh &  適合在後臺執行的命令有f i n d、費時的排序及一些s h e l

linux利用crontab設定定時任務執行jar

https://www.cnblogs.com/fxl-njfu/p/8182545.html 戶 https://www.cnblogs.com/ldy-blogs/p/8477550.html 用Linux的定時器: 1.crontab -e 按i鍵編輯這個文字檔案 0 0 */

Maven打war新增本地jar

1、在專案根目錄中新建lib資料夾,新增jar包 2.在pom.xml檔案中新增dependency <dependency>   <groupId>com.oracle</groupId>   <artifactId>ojdbc8</art

hadoop叢集執行jar報錯eclipse導jar

報錯日誌: Exception in thread "main" java.lang.UnsupportedClassVersionError: com/hdfs/wordcount/WordcountDriver has been compiled by a more recent v

Maven專案POM配置好後下載jar位置設定本地倉庫配置

新建了一個maven專案,發現所有的jar包沒有載入、、檢查了一遍才發現原來在maven的.setting檔案沒有配置本地倉庫。maven目錄/conf/.setting.xml裡新增如下地址(沒有目錄需要建立):解決問題

JavaScript--我發現原來你是這樣的JS初識源泉

pac 發現 .com -- rip php script album 原來 http://pic.cnhubei.com/space.php?uid=4614&do=album&id=1384727http://pic.cnhubei.com/space.

jar的使用maven依賴庫

1、會開發的都會的----第一種是最簡單的新建libs將jar包放入然後add  as library。 2、maven遠端倉庫新增依賴庫 接觸到這個問題要從之前從github上下載個專案,想重新整理到自己寫的專案中要用到其中的jar包,沒有找到libs。百度ing。。。直

nodejs連線Access資料庫出現Error: Spawn C:\WINDOWS\SysWOW64\cscript.exe error Java專案生成可執行jarexe檔案以及在Windows下的安裝檔案

因為集成了第三方的資料庫,所以需要獲取資料庫的資料 使用 var connection = ADODB.open('Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+config.id_path+';');  

Linux伺服器上執行jar並且使jar一直處於後臺執行

1.我jar包在linux的目錄為/a/bbb.jar         正常情況下,使用在/a目錄下使用  java -jar bbb.jar 可以直接執行該jar包的專案,執行成功之後使用crtl+c可以退出專案執行,

Linux服務器上運行jar並且使jar一直處於後臺執行

服務器 關閉 原創 目的 滿足 sdn http 也會 jar 1.我jar包在linux的目錄為/a/bbb.jar 正常情況下,使用在/a目錄下使用 java -jar bbb.jar 可以直接運行該jar包的項目,運行成功之後使用crtl+c可以退出

關於引用第三方jar生成自己jar執行找不到第三方jar的解決方案

1.將所需的第三方jar包匯入專案檔案中的lib目錄下 2.在專案檔案目錄下建立MANIFEST.MF檔案,編輯檔案,如下圖: 注意: (1)Mainifset-Version:/Class-Pat

android程式碼混淆如何防止第三方jar被混淆導致程式出錯

    程式碼混淆是給其他人破解自己的程式帶來更多困難,但混淆不能影響我們程式的正常執行.最近在程式碼混淆時出現一個問題:就是第三方jar被混淆時出現程式錯誤,錯誤主要是說找不到相關的類.     這個問題也不奇怪,我們要使用的第三方jar包被混淆成我們程式不能認識的程式碼

用jdbc技術連線資料庫要匯入相應驅動程式的jar

比如,我用jdbc技術連線mysql資料庫時,要匯入jdbc廠商提供的mysql的驅動程式包中的jar包。具體步驟如下: 在專案目錄,下新建一個資料夾,命名為lib 在網上下載mysql-connector-java-5.1.45.jar.(或者更高的版本),複製到lib

使用maven如何修改JVM的配置參數;maven命令執行到底消耗多少內存?

option oca sin port more https exe exc style maven是使用java啟動的,因此依賴JVM,那麽如何修改JVM參數? MAVEN_OPTS 在系統的環境變量中,設置MAVEN_OPTS,用以存放JVM的參數,具體設置的步

一個DOM元素綁定多個事件執行冒泡還是捕獲

msg 元素 .org tro code 常見 xxx == 添加 綁定在被點擊元素的事件是按照代碼順序發生,其他元素通過冒泡或者捕獲“感知”的事件,按照W3C的標準,先發生捕獲事件,後發生冒泡事件。所有事件的順序是:其他元素捕獲階段事件 -> 本元素代碼順序事件 -

將 Spring boot 項目打成可執行Jar及相關註意事項main-class缺少 xsd重復打包依賴

arc XA 有一個 文件中 pom.xml tomcat 我們 tool pil 最近在看 spring boot 的東西,覺得很方便,很好用。對於一個簡單的REST服務,都不要自己部署Tomcat了,直接在 IDE 裏 run 一個包含 main 函數的主類就可以了

jenkins 部署 並執行npm run dev 專案execute shell自動結束程序問題

使用 jenkins 部署 vue (npm run dev)專案時,部署狀態是顯示部署成功,但是服務沒有成功啟動,在做程序服務監控的時候發現,jenkins部署時候服務也啟動成功了,但是jenkins部署成功後 自動kill殺死或結束該程序和該程序的衍生的程序,那麼就讓jenkins不

【Web篇03】Spring框架下servlet響應的res在jsp頁面中顯示防止亂碼的操作

首先,在Spring軟體中,找到Web工程,src下的對應的servlet; 在servlet中獲取請求引數之後,給瀏覽器傳送響應之前; 需要鍵入一段程式碼即可,如下: response.setContentType("text/html;charset=UTF-8"); 括號內的

Win10遠端桌面連線winserver2012 出現 身份驗證錯誤要求的函式不受支援這可能是由於CredSSP加密Oracle修正 解決方法

解決方法: 執行 gpedit.msc 本地組策略: 計算機配置>管理模板>系統>憑據分配>加密Oracle修正 選擇啟用並選擇易受攻擊。   如果是家庭版什麼的,可能無法直接開啟組策略編輯器;可以試著在登錄檔裡,自己手動建立 H