在UNIX上後台運行任務(Shell),bg還是nohup

來源:互聯網
上載者:User

有時候一個任務啟動並執行時間很長,需要將其放在後台運行,否則推出控制台後任務就會被終止,本文講解一下怎麼讓任務在後台運行。

比如一個shell指令碼,longjobs.sh運行要很長時間,並且運行中有資訊列印到控制台。

1,如果直接通過 ./longjobs.sh啟動了任務,這時候控制台不斷有資訊列印出來,如果想把該任務調到後台,可以通過Ctr+z(在bash中(Linux的預設shell,如果是在其他Unix系統中,需要在啟動任務之前通過bash命令切換到bash,或者ksh切換到ksh,不是所有的shell都支援Ctr+z))將任務暫停。

2,通過命令bg 將任務調到後台。(但是由於不斷有資訊列印到控制台,所有實際上這時候也沒法在控制台上工作,這時候如果退出控制台,任務也會被結束。)

【因此,在unix中運行shell任務的時候最好要將列印到螢幕的資訊從新定向到檔案中,1,./longjobs.sh>longjobs.out,2,Ctr+z,3,bg 調到後台,這是後退出控制台,

(從bash中退出exit,回到預設的shell,退出控制台(關掉putty,任務會繼續執行),但是如果在還處於bash的時候就關掉putty,任務會終止】

所以,如果想把任務放在後台一直運行,不應該依賴bg來實現,而應該通過nohup來實現:(而且在所有的shell中都可行)。

該命令的一般形式為:nohup command &
在預設情況下該作業的所有輸出都被重新導向到一個名為nohup.out的檔案中,也可以另外指定了輸出檔案,如下:

nohup  ./longjobs.sh > longjobs.out 2>&1 &

nohup的意思在終端斷開(hang up)的時候,伺服器端仍然運行,注意要在nohup命令運行後按任意鍵回到shell提示符後再斷開.

這裡再補充一點&& 和&的區別

&&是用來在一次執行兩個命令 cmd1 && cmd2,如果前面的cmd1運行成功,則繼續運行cmd2,否則cmd2不運行.

date && time,兩個命令都執行.

datq && time,兩個命令都不執行,因為datq不存在.(而datq;time則會datq失敗,time正常運行)

另外,||的作用正好與&&相反。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.