nohup 真正的Shell後台執行

2021-10-23 06:27:11 字數 1635 閱讀 2725

一、&方式

/usr/local/mysql/bin/mysqld_safe --user=mysql &

二、nohup方式

但是我們很多程式並不象mysqld一樣可以做成守護程序,可能我們的程式只是普通程式而已,一般這種程式即使使用 & 結尾,如果終端關閉,那麼程式也會被關閉。為了能夠後台執行,我們需要使用nohup這個命令,比如我們有個start.sh需要在後台執行,並且希望在後台能夠一直執行,那麼就使用nohup: 

nohup /root/start.sh & 

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

nohup問題:

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

有個操作終端時的細節:當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 真正的Shell後台執行

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

nohup 真正的Shell後台執行

方式 unix linux下一般想讓某個程式在後台執行,很多都是使用 在程式結尾來讓程式自動執行。比如我們要執行mysql在後台 usr local mysql bin mysqld safe user mysql nohup方式 但是我們很多程式並不象mysqld一樣可以做成守護程序,可能我們的程...

nohup 真正的Shell後台執行

出自 方式 unix linux下一般想讓某個程式在後台執行,很多都是使用 在程式結尾來讓程式自動執行。比如我們要執行mysql在後台 usr local mysql bin mysqld safe user mysql nohup方式 但是我們很多程式並不象mysqld一樣可以做成守護程序,可能我...