Bash:脚本输出到终端会话停止但脚本完成正常

时间:2013-12-13 20:45:06

标签: bash ssh

我正在打开远程服务器的ssh会话,并在远程计算机上执行更大的(大约1000行)bash脚本。它涉及几个CPU密集型呼叫,每个呼叫最多运行三分钟。要跟踪脚本的进度,它会回显放置在脚本中多个点的消息。

通常,脚本运行顺畅。脚本不时运行(远程机器上的结果文件是正确的)但终止输出。 Ctrl-C没有帮助,没有提示,只是一个冻结的会话。单独会话中的top显示脚本的正常执行。

我的问题:如何使会话保持活力?

本地机器:

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

远程机器:

$ lsb_release -d  
Description:    Ubuntu 12.04.3 LTS

3 个答案:

答案 0 :(得分:2)

就我个人而言,我建议在远程终端上使用screentmux

即使您的本地SSH会话超时,这些应用也将允许远程进程继续。

答案 1 :(得分:2)

在远程计算机上启动一个屏幕并从中运行命令:

screen -S largeScript

然后

./yourLargeScript.sh

每当您的ssh会话被冻结时,您都可以使用~.

将其终止

如果再次ssh,您可以通过以下方式取回屏幕:

screen -dr largeScript

答案 2 :(得分:1)

让它记录到一个文件(可能通过syslog),并tail该文件从哪里方便。这也有助于分离脚本,以便您可以从cron作业等无头运行脚本。此外,如果日志文件对其他人具有读取权限,他们也可以监视它。