nohup介绍
2019獨角獸企業重金招聘Python工程師標準>>>
背景
我們通常使用&將前臺任務變為后臺任務執行,但是如果只是使用&,那么在突然斷網或者關閉啟動該任務的終端(ps:可使用putty來測試,部分軟件如mobaxterm做了優化,關閉終端是友好關閉的)時,內核就會給后臺任務發送SIGHUP信號,從而導致后臺任務停止。這時,我們就需要使用nohup來啟動該后臺任務。
簡介
nohup,顧名思義,就是使得運行的命令可以忽略HANGUP信號。因此,即使突然斷網或者關閉終端,該后臺任務依然可以繼續執行。
這里需要指明的是,nohup并不會自動將任務運行在后臺,我們需要在命令行末尾加上&來顯示的指明。
進階
如果nohup命令的標準輸入是終端,那么nohup將會默認使用/dev/null來重定向。
如果nohup命令的標準輸出是終端,那么標準輸出會被附加到文件nohup.out中;如果用戶沒有在當前目錄創建文件的權限,那么就會把輸出附加到$HOME/nohup.out中;如果還是沒有寫入權限,那么該命令就不會執行。
如果nohup命令的標準錯誤是終端,那么就會被定向到標準輸出的附加的文件描述符。如果標準輸出被關閉了,那么標準錯誤就會像上面一樣嘗試附加到nohup.out或$HOME/nohup.out中。
測試
這里,我們先創建一個需要較長時間來執行的腳本。該腳本會打印一個數字(標準輸出),刪除一個不存在的文件(標準錯誤輸出)。
$ vi test.sh for i in `seq 1 20`; do echo $i; rm a.txt; sleep 1; done默認參數
我們來后臺執行該文件。
$ nohup sh test.sh & [1] 9119 $ nohup: ignoring input and appending output to 'nohup.out'在上面執行的命令中,由輸出nohup: ignoring input and appending output to 'nohup.out'可知,標準輸出被重定向到nohup.out中,我們查看下該文件。
$ head nohup.out 1 rm: cannot remove 'a.txt': No such file or directory 2 rm: cannot remove 'a.txt': No such file or directory 3 rm: cannot remove 'a.txt': No such file or directory 4 rm: cannot remove 'a.txt': No such file or directory 5 rm: cannot remove 'a.txt': No such file or directory ...該文件包含了命令的標準輸出和標準錯誤輸出。
重定向標準輸出
$ nohup sh test.sh 1>o.out & [1] 9378 $ nohup: ignoring input and redirecting stderr to stdout在上面執行的命令中,可知,標準輸出被重定向到stdout中,而標準輸出又重定向到了o.out中,我們查看下該文件。
$ head o.out 1 rm: cannot remove 'a.txt': No such file or directory 2 rm: cannot remove 'a.txt': No such file or directory 3 rm: cannot remove 'a.txt': No such file or directory 4 rm: cannot remove 'a.txt': No such file or directory 5 rm: cannot remove 'a.txt': No such file or directory ...該文件包含了標準輸出和標準錯誤輸出的。
重定向標準輸出標準錯誤輸出
$ nohup sh test.sh 1>o.out 2>e.out & [1] 9490這一次,終端沒有其他輸出。我們直接查看命令行中的兩個文件。
$ head o.out 1 2 3 4 5 6 7 8 9 10$ head e.out nohup: ignoring input rm: cannot remove 'a.txt': No such file or directory rm: cannot remove 'a.txt': No such file or directory rm: cannot remove 'a.txt': No such file or directory rm: cannot remove 'a.txt': No such file or directory rm: cannot remove 'a.txt': No such file or directory rm: cannot remove 'a.txt': No such file or directory rm: cannot remove 'a.txt': No such file or directory rm: cannot remove 'a.txt': No such file or directory rm: cannot remove 'a.txt': No such file or directoryshell腳本中執行nohup的問題
如果我們在shell中執行nohup命令,并且沒有進行任何重定向,那么終端上就會彈出“nohup: ignoring input and appending output to 'nohup.out'”,并且,只有敲擊回車,shell才能繼續執行,否則就會卡住。
經過試驗,發現只要重定向了標準錯誤輸出,終端就不會彈出任何提示,也不會卡住。但是標準錯誤附加的文件會出現其他的錯誤提示,只有重定向所有標準輸入、標準輸出和標準錯誤輸出后,不會有任何錯誤提示。如:
參考
http://www.cnblogs.com/allenblogs/archive/2011/05/19/2051136.html http://www.cnblogs.com/lovemo1314/archive/2011/07/13/2105472.html http://www.gnu.org/software/coreutils/manual/html_node/nohup-invocation.html#nohup-invocation https://stackoverflow.com/questions/24646320/nohupignoring-input-and-appending-output-to-nohup-out
轉載于:https://my.oschina.net/styshoo/blog/1529011
總結
- 上一篇: Spark Mllib里的如何对两组数据
- 下一篇: Cisco WLC 配置 NPS服务器