远程连接自动断开的问题解决办法

远程连接自动断开的问题解决办法

远程连接自动断开的问题解决办法

1. 问题描述

我们都知道,作为服务器,默认一般都是被动的等待客户端的连接到来。但对基于ssh协议的xshell的运用,总是出现自动断开的情况。

但是我们经常需要运行一些需要很长时间才能完成的任务,比如系统备份、ftp 传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为它们执行的时间太长了。必须等待它们执行完毕,在此期间不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。

2. 解决办法

可以将该会话“保存”,只要远程服务器不关闭,该会话就一直进行,下次需要的时候 重新连接即可。那么如何保存当前会话呢?

答案就是神器:screen

2.1. screen解决方案

先看其简介:

Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。

由简介我们知道,screen可以在不同回话之间切换,那么,我们利用它的这个性能,把需要的会话“保存”,等到第二天用的使用再“切换”回 当时的会话即可。

怎么操作呢?我们先看一个简单粗暴地例子:我需要运行一个跑一夜的程序,那么在巡行程序之前先进行一步操作:

  1. screen -S myOneNight
    这句话的意思是,创建了一个叫 myOneNight 的screen作业会话。
  2. 现在,再执行你的 运行一夜的代码。。。。
  3. 关机,或者去玩其他事情。
  4. 第二天,再打开shell 运行命令:screen -r myOneNight 我们发现,昨天的程序还在正常运行。爽。

3. screen详解

3.1 安装screen

其实流行的Linux发行版(例如Red Hat Enterprise Linux)通常会自带screen实用程序,如果没有的话,可以从GNU screen的官方网站下载。

1
2
3
4
[root@TS-DEV ~]# yum install screen
[root@TS-DEV ~]# rpm -qa|grep screen
screen-4.0.3-4.el5
[root@TS-DEV ~]#

3.2 创建一个新的窗口

安装完成后,直接敲命令screen就可以启动它。但是这样启动的screen会话没有名字,实践上推荐为每个screen会话取一个名字,方便分辨:screen -S david

3.3 常用的命令

1
2
3
4
5
screen -S yourname -> 新建一个叫yourname的session
screen -ls -> 列出当前所有的session
screen -r yourname -> 回到yourname这个session
screen -d yourname -> 远程detach某个session
screen -d -r yourname -> 结束当前session并回到yourname这个session

screen的选项:

1
2
3
4
5
6
7
8
9
10
11
12
-A  将所有的视窗都调整为目前终端机的大小。
-d <作业名称>  将指定的screen作业离线。
-h <行数>  指定视窗的缓冲区行数。
-m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-r <作业名称>  恢复离线的screen作业。
-R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s  指定建立新视窗时,所要执行的shell。
-S <作业名称>  指定screen作业的名称。
-v  显示版本信息。
-x  恢复之前离线的screen作业。
-ls或--list  显示目前所有的screen作业。
-wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。

4 引用

screen还有更加丰富的 高级用法,请参考:

  1. GNU’s Screen 官方站点:http://www.gnu.org/software/screen/
  2. screen 常用工具命令:http://man.linuxde.net/screen

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×