2011-08-20 60 views
0

我是shell腳本的noob,我嘗試搜索但找不到解決方案。將終止一個shell腳本中止正在執行的命令

我有一個糟糕的互聯網連接,它不斷下降。我必須在遠程服務器上運行某些命令。當我在終端上ssh並運行這些命令並且連接斷開時,我不確定命令是否繼續,或者它也停止了(我認爲它的行爲就像收到Ctrl^C一樣,我正確嗎?)

現在我已經把所有的命令放在一個shell腳本中。 ftp-ed在服務器上,並通過ssh在終端上運行它。這將保證即使連接斷開,我的命令也能運行。或者我應該將它包裝在另一個shell腳本中?

謝謝。

回答

3

如果在連接斷開後需要保留遠程運行的命令,請使用nohup。詳情請參閱man nohup。我想你需要做的是遠程端運行:

nohup /path/to/your_script.sh & 

更確切地說,只要連接斷開,在服務器端發生超時,套接字被關閉,並用它屬於所有進程ssh連接進程的進程樹。

+3

換句話說,它會中止。如果你不想使用'nohup'。 – AppleGrew

+0

感謝AppleGrew,我編輯了這篇文章,將您的評論納入考慮範圍。 – pkk

0

使用nohupscreen會話

2

你需要看到的輸出中運行腳本或運行腳本?

如果是這樣,然後使用screen,它有效地運行服務器上的所有內容,並讓您遠程連接到屏幕。

如果您不這樣做,那麼您可以使用nohup來背景進程。這樣做時,請確保您重定向標準流即

nohup script_to_run &>/dev/null </dev/null & 
0

爲了保證命令或腳本將運行,即使連接被刪除,請使用nohup

對於更多的控制,使用GNU屏幕(您將能夠重新連接並返回到運行命令的終端)。

man nohupman screen有更多信息。