2013-12-13 86 views
2

我打開ssh會話到遠程服務器並在遠程計算機上執行較大(約1000行)的bash腳本。它涉及幾個CPU密集型呼叫,每個呼叫的運行時間長達三分鐘。爲了跟蹤腳本進度,它會在腳本中的幾個點上回應放置的消息。Bash:腳本輸出到終端會話停止,但腳本完成正常

通常腳本運行順利。有時腳本運行低谷(遠程機器上的結果文件是正確的),但終端的輸出停止。 Ctrl-C沒有幫助,沒有提示,只是一個凍結的會話。在單獨的會話頂部顯示腳本的正常執行。

我的問題:如何讓會話保持活躍狀態​​?

本地機器:

$ sw_vers 
ProductName: Mac OS X 
ProductVersion: 10.9 
BuildVersion: 13A603 

遠程機器:

$ lsb_release -d 
Description: Ubuntu 12.04.3 LTS 
+0

你可以發佈腳本嗎? – Dan

+0

@Dan:我不喜歡它,因爲裏面有很多硬編碼的信息。這不是什麼瘋狂的事情,只是很多捲曲,循環和不健康的'gmt' *電話。 *'格林尼治標準時間 - 通用映射工具版本5.1.0' – Chris

回答

2

就個人而言,我會建議正是這個原因,遠程終端上使用screentmux

即使您的本地SSH會話超時,這些應用程序仍將允許遠程進程繼續。

+0

如果它真的只是一個超時 - 我不應該得到像寫入失敗:破管 $ – Chris

+0

不一定如果遠程會話掛起(你似乎建議)。我有同樣的問題。 Screen或Tmux允許您重新連接到正在進行的遠程會話。我相信屏幕預裝在大多數Linux發行版(和OSX)上。 – Donovan

+0

好吧,使用「屏幕」它會像廣告一樣運行(現在)。謝謝! – Chris

2

啓動遠程機器上的屏幕並從中運行命令:

screen -S largeScript 

然後

./yourLargeScript.sh 

每當你的ssh會話被凍結,你可以用~.

殺死它。如果你ssh再次,你可以搶回來屏幕:

screen -dr largeScript 
+0

謝謝你擴大Donovans建議與實際電話。 – Chris

1

讓它記錄到一個文件,而不是(可能通過syslog)和tail該文件來自任何方便的地方。這也有助於分離腳本,以便您可以從cron作業無頭運行等。另外,如果日誌文件具有其他人的讀取訪問權限,他們也可以監視它。