日常開發中常用命令之 nohup 命令


之前幾篇文章分享了異步接口的實現和原理,基本上都是需要查看源碼來輔助理解,說實話,看懂之后可能覺得還好,但是在一開始不太清楚的時候閱讀源碼確實有點枯燥,尤其是在你不是很想去了解這個的時候。只有當我們真正想去了解這個東西的時候可能才會願意花精力去研究,這時候就不會那么無聊了,反而會覺得在探索的過程中很有趣。

接下來我開始分享稍微輕松一點但又不那么無聊而且很實用的東西,那就是日常中我們肯定會用到很多命令,有一部分是我們用的比較頻繁,而且又是必備的命令,這些命令我們需要熟練掌握,這有利於提高我們日常的工作效率。

首先我們要知道所有的命令都是為了幫助我們完成一件或多件事情的,也就是在計算機系統中,我們想要做什么,都需要通過相對應的命令來告訴計算機我們的需求,如果某個命令經常用,也就說明這個命令所做的事情我們經常需要做,下面我們就根據常見需求來引出相對應的命令。

后台啟動 SpringBoot 項目:

nohup java -jar usercenter.jar --spring.profiles.active=development > usercenter.log 2>&1 &

作為后台開發人員來說,日常應該經常需要啟動項目程序,只不過平常本地都是通過 idea 來啟動,如果現在需要將 usercenter 項目打包部署到一台用於開發測試的服務器上,那么這時候我們需要將 usercenter 打包,然后拷貝到服務器上,拷貝上去之后再通過 ssh 命令連接到服務器終端,這里假設服務器都已經是安裝好了 Java 的運行時環境。接下來我們就可以啟動剛才拷貝上來的 jar 包了。正常前台啟動的命令是:

java -jar usercenter.jar --spring.profiles.active=development

但是這種方式是前台啟動,日志直接輸出到終端,這對於一次性啟動的項目那還好,啟動完測試好了直接關閉終端斷開服務器連接就好,但是如果想要在我們退出終端后讓它保持繼續運行的話就不行了,因為上面的這種方式在我們退出終端的同時程序也停止運行了。這時候就有必要通過后台啟動的方式來讓程序保持在后台繼續運行,也就是 nohup 命令。

nohup 英文全稱是 no hang up(不掛起),用於在系統后台不掛斷地運行命令,退出終端不會影響程序的運行。nohup 命令,在默認情況下(非重定向時),會輸出一個名叫 nohup.out 的文件到當前目錄下,如果當前目錄的 nohup.out 文件不可寫,輸出重定向到 $HOME/nohup.out 文件中。

語法格式:nohup Command [ Arg … ] [&]
參數說明:
Command:要執行的命令。
Arg:一些參數,可以指定輸出文件。
&:讓命令在后台執行,終端退出后命令仍舊執行。

上面這一段是菜鳥教程里面對 nohup 命令的介紹,對於上面描述的默認情況下輸出一個名叫 nohup.out 的文件到當前目錄說的是我們沒有將 nohup 命令的輸出重定向到其他文件的話會輸出到當前目錄下一個默認的名叫 nohup.out 的文件中,如果當前目錄的 nohup.out 文件不可寫,輸出重定向到 $HOME/nohup.out 文件中。

也就是如果以下面的方式執行則會在當前目錄下產生一個 nohup.out 的文件。

nohup java -jar usercenter.jar --spring.profiles.active=development &

但如果在當前目錄下我們需要啟動多個項目的話,項目啟動的日志就都輸出到 nohup.out 文件中了,不利於我們查看日志,這時候我們可能需要進行日志重定向來區分不同項目的日志輸出,這樣也有利於我們后期再次登錄服務器時通過文件名區分不同項目的日志輸出。

於是我們就用到了下面的命令:

nohup java -jar usercenter.jar --spring.profiles.active=development > usercenter.log 2>&1 &

為了幫助更好地理解上面這個命令,我們先了解下關於終端輸入輸出一個概念:

0< – stdin (standard input,標准輸入) ,簡寫 <
1> – stdout (standard output,標准輸出),簡寫 >
2> – stderr (standard error,標准錯誤輸出) 

對於上面這個命令,中間 java -jar 那一部分自然就是我們要執行的項目啟動命令,nohup 以及末尾的 & 表示在后台不掛斷的執行 java -jar 命令,即使終端退出后命令仍繼續執行,> usercenter.log 表示將命令的標准輸出重定向到 usercenter.log 文件,2>&1 表示將標准錯誤輸出也重定向到標准輸出中,也就是說命令執行的標准輸出和標准錯誤輸出都輸入到 usercenter.log 文件中。

當然如果我們不關心命令執行的輸出結果,也不想要默認生成的那個 nohup.out 文件,這時候我們可以將輸出重定向到 /dev/null,/dev/null 是一個特殊的文件,它接受並丟棄寫入其中的所有輸入。一般對於那種可能產生大量的日志輸出時,這個就比較有用了,避免日志文件占據大量空間。

微信公眾號:rookiedev,Java 后台開發,勵志終身學習,堅持原創干貨輸出,你可選擇現在就關注我,或者看看歷史文章再關注也不遲。長按二維碼關注,我們一起努力變得更優秀!
rookiedev


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM