Linux Shell nohup命令用法

2021-09-10 02:09:11 字數 2774 閱讀 8425

在應用unix/linux時,我們一般想讓某個程式在後台執行,於是我們將常會用 & 在程式結尾來讓程式自動執行。比如我們要執行mysql在後台: /usr/local/mysql/bin/mysqld_safe –user=mysql &。可是有很多程式並不想mysqld一樣,這樣我們就需要nohup命令,怎樣使用nohup命令呢?這裡講解nohup命令的一些用法。

nohup /root/start.sh &

原程式的的標準輸出被自動改向到當前目錄下的nohup.out檔案,起到了log的作用。

但是有時候在這一步會有問題,當把終端關閉後,程序會自動被關閉,察看nohup.out可以看到在關閉終端瞬間服務自動關閉。

諮詢紅旗linux工程師後,他也不得其解,在我的終端上執行後,他啟動的程序竟然在關閉終端後依然執行。

在第二遍給我演示時,我才發現我和他操作終端時的乙個細節不同:他是在當shell中提示了nohup成功後還需要按終端上鍵盤任意鍵退回到shell輸入命令視窗,然後通過在shell中輸入exit來退出終端;而我是每次在nohup執行成功後直接點關閉程式按鈕關閉終端.。所以這時候會斷掉該命令所對應的session,導致nohup對應的程序被通知需要一起shutdown。

這個細節有人和我一樣沒注意到,所以在這兒記錄一下了。

nohup 命令

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

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

描述:nohup 命令執行由 command 引數和任何相關的 arg 引數指定的命令,忽略所有結束通話(sighup)訊號。在登出後使用 nohup 命令執行後台中的程式。要執行後台中的 nohup 命令,新增 & ( 表示」and」的符號)到命令的尾部。

無論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當前目錄的 nohup.out 檔案中。如果當前目錄的 nohup.out 檔案不可寫,輸出重定向到 $home/nohup.out 檔案中。如果沒有檔案能建立或開啟以用於追加,那麼 command 引數指定的命令不可呼叫。如果標準錯誤是乙個終端,那麼把指定的命令寫給標準錯誤的所有輸出作為標準輸出重定向到相同的檔案描述符。

退出狀態:該命令返回下列出口值:

126 可以查詢但不能呼叫 command 引數指定的命令。

127 nohup 命令發生錯誤或不能查詢由 command 引數指定的命令。

否則,nohup 命令的退出狀態是 command 引數指定命令的退出狀態。

nohup命令及其輸出檔案

nohup命令:如果你正在執行乙個程序,而且你覺得在退出帳戶時該程序還不會結束,那麼可以使用nohup命令。該命令可以在你退出帳戶/關閉終端之後繼續執行相應的程序。nohup就是不掛起的意思( n ohang up)。

該命令的一般形式為:nohup command &

使用nohup命令提交作業

如果使用nohup命令提交作業,那麼在預設情況下該作業的所有輸出都被重定向到乙個名為nohup.out的檔案中,除非另外指定了輸出檔案:

nohup command > myout.file 2>&1 &

在上面的例子中,輸出被重定向到myout.file檔案中。

使用 jobs 檢視任務。

使用 fg %n 關閉。

nohup命令及其輸出檔案

今天在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 

uboot mmc read write命令用法

mmc read用來讀取mmc內容到記憶體,mmc write用來寫入記憶體內容到mmc中 具體用法,mmc read addr blk cnt partition mmc write addr blk cnt partition mmc list device num是mmc的裝置號,可以通過mm...

uboot mmc read write命令用法

mmc read用來讀取mmc內容到記憶體,mmc write用來寫入記憶體內容到mmc中 具體用法,mmc read addr blk cnt partition mmc write addr blk cnt partition mmc list device num是mmc的裝置號,可以通過mm...

uboot mmc read write命令用法

mmc read用來讀取mmc內容到記憶體,mmc write用來寫入記憶體內容到mmc中 具體用法,mmc read addr blk cnt partition mmc write addr blk cnt partition mmc list device num是mmc的裝置號,可以通過mm...