无名阁

美好的生活需要用心记录

让程序可以在断开ssh连接后接着运行

2012-5-4 笑看风云 linux知识

最近把路由器换成了openwrt系统的路由器,因为openwrt是Linux系统,所以安装很多软件,增加很多之前的路由器没有的功能。常用的 就是离线下载功能了,bt可以通过安装Transmission来解决,电骡可以通过安装aMule解决,http和ftp可以通过wget和axel解 决。

但是问题来了,因为Transmission和aMule都有图形界面,所有下载文件都比较方便,可是Wget就不一样了,因为没有图形界面所以只 能登录ssh来下载,可是如果下载的文件比较大,等待的时间比较长,就必须等待它执行完毕,在此期间可不能关掉窗口或者断开连接,否则这个任务就会被杀 掉,一切半途而废了。

为了解决这个问题,上网查了半天资料总算在这里找到了解决办法:

linux 技巧:使用 screen 管理你的远程会话

文中介绍了screen这个软件,我们可以通过这个软件来管理命令。具体的方法我就不说了,大家可以到上面的这个网站自己看看,我就说说简单的基本应用。

安装screen:

ubuntu

sudo apt-get install screen

openwrt

opkg update
opkg install screen

screen的使用方法:

1.直接在命令行键入screen命令

root@DreamBox:~# screen 

Screen将创建一个执行shell的全屏窗口。你可以执行任意shell程序,就像在ssh窗口中那样。在该窗口中键入exit退出该窗口,如果这是该screen会话的唯一窗口,该screen会话退出,否则screen自动切换到前一个窗口。

2.Screen命令后跟你要执行的程序。

root@DreamBox:~# screen wget http://xxx.xxx/xxx

3.以上两种方式都创建新的screen会话。我们还可以在一个已有screen会话中创建新的窗口。在当前screen窗口中键入C-a c,即Ctrl键+a键,之后再按下c键,screen 在该会话内生成一个新的窗口并切换到该窗口。

screen还有更高级的功能。你可以不中断screen窗口中程序的运行而暂时断开(detach)screen会话,并在随后时间重新连接(attach)该会话,重新控制各窗口中运行的程序。

例如,我们打开一个screen窗口编辑/tmp/abc文件:

[root@tivf06 ~]# screen vi /tmp/abc

 

之后我们想暂时退出做点别的事情,比如出去散散步,那么在screen窗口键入C-a d,Screen会给出detached提示


暂时中断会话
暂时中断会话

半个小时之后回来了,找到该screen会话:

[root@tivf06 ~]# screen -ls
There is a screen on:
        16582.pts-1.tivf06      (Detached)
1 Socket in /tmp/screens/S-root.

 

重新连接会话:

[root@tivf06 ~]# screen -r 16582

 

看看出现什么了,太棒了,一切都在。继续干吧。

你可能注意到给screen发送命令使用了特殊的键组合C-a。这是因为我们在键盘上键入的信息是直接发送给当前 screen窗口,必须用其他方式向screen窗口管理器发出命令,默认情况下,screen接收以C-a开始的命令。这种命令形式在screen中叫 做键绑定(key binding),C-a叫做命令字符(command character)。

管理你的远程会话

先来看看如何使用screen解决SIGHUP问题,比如现在我们要ftp传输一个大文件。如果按老的办法,SSH登录到 系统,直接ftp命令开始传输,之后。。如果网络速度还可以,恭喜你,不用等太长时间了;如果网络不好,老老实实等着吧,只能传输完毕再断开SSH连接 了。让我们使用screen来试试。

SSH登录到系统,在命令行键入screen。

[root@tivf18 root]# screen

 

在screen shell窗口中输入ftp命令,登录,开始传输。不愿意等了?OK,在窗口中键入C-a d:


管理你的远程会话
管理你的远程会话

然后。。退出SSH登录?随你怎样,只要别杀掉screen会话。

是不是很方便?更进一步,其实我们可以利用screen这种功能来管理你的远程会话,保存你所有的工作内容。你是不是每次 登录到系统都要开很多窗口,然后每天都要重复打开关闭这些窗口?让screen来帮你“保存”吧,你只需要打开一个ssh窗口,创建需要的screen窗 口,退出的时候C-a d“保存”你的工作,下次登录后直接screen -r <screen_pid>就可以了。

本文转自:http://www.ibm.com/developerworks/cn/linux/l-cn-screen/#N100B3

标签: ssh

et_highlighter51

发表评论: