2013-12-13 85 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作业无头运行等。另外,如果日志文件具有其他人的读取访问权限,他们也可以监视它。