Linux學習之nohup命令詳解

2021-07-27 08:42:08 字數 2232 閱讀 9229

在實際生產環境中,平時常常因為實際需求,

要在後台掛起乙個指令碼或者是程序,如果是掛起程序還可以使用

xinetd

服務來進行守護程序,但是如果只是需要在後台掛起乙個指令碼的話,使用

xinetd

服務就有點不太合適了,還好

linux系統

中有提供乙個很好的不結束通話地執行命令——nohup

。我們使用

nohup

能很簡單的控制使用,在此就簡單的介紹一下

nohup

工具。

使用nohup

使用很簡單,一般的格式為:

nohup command & 

,用這樣的格式後台不結束通話某個指令和相應指令碼,在預設情況下會在當前目錄下生成

nohup.out

檔案,當然如果當前目錄無法寫入那麼就會到家目錄下生成

nohup.out

,這裡要注意的是如果是需要掛起的指令碼有

stty

輸出這樣直接使用,

nohup.out

檔案會隨著使用的時間的推移,檔案不斷的增大,這樣會有一定的隱患,比較安全的做法是用

/dev/null

定期清理

nohup.out

檔案。

在linux

上部署wdt程式,在

ssh客戶端執行

./start-dishi.sh,

啟動成功

,在關閉

ssh客戶端後,執行的程式也同時終止了,怎樣才能保證在推出

ssh客戶端後程式能一直執行呢?需要使用

nohup

命令。

完美解決方案:nohup ./start-dishi.sh >output 2>&1 &

現對上面的命令進行下解釋

用途:不結束通話地執行命令。

語法:nohup command [ arg ... ] [ & ]

描述:nohup 

命令執行由 

command 

引數和任何相關的 

arg 

引數指定的命令,忽略所有結束通話(

sighup

)訊號。在登出後使用 

nohup 

命令執行後台中的程式。要執行後台中的 

nohup 

命令,新增 

&( 表示

「and」

的符號)到命令的尾部。

作業系統中有三個常用的流: 0

:標準輸入流 

stdin 1

:標準輸出流 

stdout 2

:標準錯誤流 

stderr

一般當我們用 > console.txt

,實際是 

1>console.txt

的省略用法;

< console.txt 

,實際是 

0 < console.txt

的省略用法。

下面步入正題:

>nohup ./start-dishi.sh >output 2>&1 &

解釋:

1.  帶

&的命令列,即使

terminal

(終端)關閉,或者電腦宕機程式依然執行(前提是你把程式遞交到伺服器上);

2. 2>&1

的意思這個意思是把標準錯誤(2

)重定向到標準輸出中(

1),而標準輸出又匯入檔案

output

裡面,所以結果是標準錯誤和標準輸出都匯入檔案

output

裡面了。 至於為什麼需要將標準錯誤重定向到標準輸出的原因,那就歸結為標準錯誤沒有緩衝區,而

stdout

有。這就會導致 

>output 2>output 

檔案output

被兩次開啟,而

stdout

和stderr

將會競爭覆蓋,這肯定不是我門想要的.

這就是為什麼有人會寫成: nohup ./command.sh >output 2>output

出錯的原因了

最後談一下/dev/null

檔案的作用,這是乙個無底洞,任何東西都可以定向到這裡,但是卻無法開啟。 所以一般很大的

stdou

和stderr

當你不關心的時候可以利用

stdout

和stderr

定向到這裡

>./command.sh >/dev/null 2>&1

公社

Linux常用命令之nohup

在應用unix linux時,我們一般想讓某個程式在後台執行有三種方式 將 跟在程式結尾來讓程式自動執行。前面文章講過的screen命令。linux常用命令之screen 今天要講的nohup命令。1.概述 nohup 命令執行由 command引數和任何相關的 arg引數指定的命令,忽略所有結束通...

Linux之nohup命令 一杯美酒

1 nohup命令功能簡介 root vms002?opt whatis?nohup nohup?1 run?a?command?immune?to?hangups,with?output?to?a?non tty?執行乙個不受hangups影響的命令,輸出到乙個非tty nohup?1p invo...

LINUX 命令nohup的用法

usr local mysql bin mysqld safe user mysql 但是加入我們很多程式並不象mysqld一樣做成守護程序,可能我們的程式只是普通程式而已,一般這種程式使用 結尾,但是如果終端關閉,那麼程式也會被關閉。但是為了能夠後台執行,那麼我們就可以使用nohup這個命令,比如...