nohup
加&
是後台執行並把stdout輸出到檔案nohup.out中。其實&
是後台執行的命令。
一般都是在linux下nohup格式:
nohup command_line
或者nohup command_line &
不帶&
的命令是在前台執行,按下ctr
+c
時,任務中斷。帶&
的命令時後台執行,即使terminal關閉,或者電腦宕機程式依然執行(前提是程式已遞交到伺服器上)。
以上兩個命令把標準輸出(stdout)和標準錯誤(stderr)結果輸出到nohup.txt。但是當輸出很大的時候,nohup.txt檔案會非常大,或者多個後台命令的時候大家都會輸出到nohup.txt檔案,不利於查詢結果和除錯程式。
所以能夠重定向輸出會非常方便。下面要介紹標準輸出,標準輸入 和標準錯誤了。
其實我門一直都在用,只是沒有注意到,比如
./command.sh > output
這其中的>
就是標準輸出符號,其實是1>output
的縮寫
./command.sh 2> output
這裡的2>
就是將標準錯誤輸出到output檔案裡。而0<
則是標準輸入了。
模板命令如下:
nohup ./command.sh > output 2>&1 &
nohup
有兩個作用:
忽略所有傳送給子命令的結束通話(sighup)訊號
所有發給command.sh
的sighup訊號都被忽略,command.sh
就不會收到sighup訊號。什麼是sighup訊號呢?
簡單的理解可以是終端結束時,作業系統會傳送sighup訊號到後台程序。
重定向子命令的標準輸出(stdout)和標準錯誤(stderr)
command.sh
的標準輸出和標準錯誤被重定向到nohup.out
檔案;如果沒有使用nohup方式,則command.sh
的標準輸出和標準錯誤是復用父程序的標準輸出和標準錯誤。
後台執行,即使terminal關閉,或者電腦宕機程式依然執行(前提是程式已遞交到伺服器上)
這個命令的意思是把標準錯誤(2)重定向到標準輸出中(1),而標準輸出又匯入檔案output裡面,所以結果是標準錯誤和標準輸出都匯入檔案output裡面了。
至於為什麼需要將標準錯誤重定向到標準輸出的原因,那就歸結為標準錯誤沒有緩衝區,而stdout有。
這就會導致>output 2>output
檔案output被兩次開啟,而stdout和stderr將會競爭覆蓋,這就是為什麼有人會寫成:
nohup ./command.sh >output 2>output
出錯的原因了
通常後台執行重定向可以寫成:
nohup sh command.sh > logs/command.log 2>&1 &
標準錯誤和標準輸出都會匯入logs
資料夾下的command.log
日誌檔案。
這是乙個無底洞,任何東西都可以定向到這裡,但是卻無法開啟。所以一般很大的stdou和stderr當你不關心的時候可以利用stdout和stderr定向到這裡>./command.sh >/dev/null 2>&1
。
nohup後台執行程式以及輸出重定向
第一種 支援後台執行,但是關閉終端的話,程式也會停止 command 第二種 支援後台執行,關閉終端後,程式也會繼續執行 nohup command 但是,當我自己使用nohup這個命令時,會報下面這樣的錯。或者這樣的錯。nohup failed to run command etc nginx c...
python subprocess重定向標準輸出
subprocess.call ping c 1 s ip,shell true,stdout open dev null w stderr subprocess.stdout ping傳送乙個icmp請求,並且將標準輸出重定向到 dev null,相當於丟棄,並且將標準錯誤輸出重新定向到標準輸出。...
nohup 後台執行
1 nohup命令 nohup 命令 log 會將本應在螢幕上顯示的輸出,重定向到同級目錄的 out中,即後台執行並把stdout輸出到檔案nohup.out中,可以使用 來重定向輸出。2 例子 3 應用環境 一般都是在linux下 4 nohup是否有匹配的 nohup command line或...