Linux學習筆記:nohup & 后台任務


  在linux中,使用nohup xxx.sh &可以將前台任務變成后台任務執行,如果只使用&的話,在突然斷網或者關閉啟動終端時,內核會向后台任務發送sighup信號,從而導致后台任務停止,此時,使用nohup命令可以忽略hangup信號,使得后台任務繼續執行。注意,nohup不會自動將任務掛在后台運行,需要配合&進行說明。

  •   如果nohup命令的標准輸入是終端,那么nohup將會默認使用/dev/null來重定向。
  •   如果nohup命令的標准輸出是終端,那么標准輸出會被附加到文件nohup.out中;如果用戶沒有在當前目錄創建文件的權限,那么就會把輸出附加到$HOME/nohup.out中;如果還是沒有寫入權限,那么該命令就不會執行。 
  •   如果nohup命令的標准錯誤是終端,那么就會被定向到標准輸出的附加的文件描述符。如果標准輸出被關閉了,那么標准錯誤就會像上面一樣嘗試附加到nohup.out$HOME/nohup.out中。

 測試:

  新建一個腳本:打印一個數字,刪除一個不存在的文件。

# vi nohup_tes.sh
for i in `seq 1 20`; do echo $i; rm a.txt; sleep 0.5; done

  后台執行該任務

nohup sh nohup_test.sh & # nohup: appending output to “nohup.out”

  在上面執行的命令中,由輸出可知,標准輸出被重定向到nohup.out中,查看下該文件。

# cat nohup.out 1
rm: 無法刪除 “a.txt”: 沒有那個文件或目錄 2
rm: 無法刪除 “a.txt”: 沒有那個文件或目錄 3
rm: 無法刪除 “a.txt”: 沒有那個文件或目錄 4
rm: 無法刪除 “a.txt”: 沒有那個文件或目錄

  該文件包含了命令的標准輸出和標准錯誤輸出。

  重定向標准輸出

nohup sh nohup_test.sh 1>o.out &

  在上面執行的命令中,標准輸出被重定向到stdout中,而標准輸出又重定向到了o.out中。

# head o.out 1
rm: 無法刪除 “a.txt”: 沒有那個文件或目錄 2
rm: 無法刪除 “a.txt”: 沒有那個文件或目錄 3
rm: 無法刪除 “a.txt”: 沒有那個文件或目錄 4
rm: 無法刪除 “a.txt”: 沒有那個文件或目錄

  該文件包含了標准輸出和標准錯誤輸出。

  重定向標准輸出、標准錯誤輸出

nohup sh nohup_test.sh 1>o.out 2>e.out &

  查看輸出文件

#  head o.out 1
2
3
4
5 # head e.out rm: 無法刪除 “a.txt”: 沒有那個文件或目錄 rm: 無法刪除 “a.txt”: 沒有那個文件或目錄 rm: 無法刪除 “a.txt”: 沒有那個文件或目錄 rm: 無法刪除 “a.txt”: 沒有那個文件或目錄

  shell腳本中執行nohup的問題

  如果我們在shell中執行nohup命令,並且沒有進行任何重定向,那么終端上就會彈出“nohup: ignoring input and appending output to ‘nohup.out’”,並且,只有敲擊回車,shell才能繼續執行,否則就會卡住。 
  只要重定向了標准錯誤輸出,終端就不會彈出任何提示,也不會卡住。但是標准錯誤附加的文件會出現其他的錯誤提示,只有重定向所有標准輸入、標准輸出和標准錯誤輸出后,不會有任何錯誤提示。如:

nohup sh nohup_test.sh >out.log 2>&1 </dev/null &

  其他:

  • 使用job查看任務
  • 使用fg %n關閉任務

  另外2個常用ftp工具:

  • ncftpget:后台ftp下載
  • ncftpput:后台ftp上傳

END 2018-08-22 11:24:50


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM