首頁 > 軟體

Linux下nohup命令使用簡述

2020-06-16 17:21:05

在實際生產環境中,平時常常因為實際需求,要在後台掛起一個指令碼或者是進程,如果是掛起進程還可以使用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

 本文永久更新連結地址http://www.linuxidc.com/Linux/2017-02/140857.htm


IT145.com E-mail:sddin#qq.com