不知各位朋友曾经有没有遇到这个问题:使用SSH连接到服务器,然后执行一个大数据复制任务,当网络异常或其它因素导致突然断开连接,远程命令也会停止,只能重新连接后再运行。本文就是教大家如何使用screen命令,避免出现以上问题。当然这种类似的命令还有很多,如轻量级的”nohup”等。都可以多多尝试。
screen
screen是一个可以在多个进程之间多路复用一个物理终端的全屏窗口管理器。
用户可以在一个screen会话中创建多个screen子会话,在每一个screen会话(或子会话)中就像操作一个真实的telnet/SSH连接窗口。
1)安装screen
CentOS系统安装screen,安装方法如下:
1 |
yum install screen |
Debian系统安装screen,安装方法如下:
1 |
apt-get install screen |
先在SSH中执行screen命令,如果提示screen:command not found,则在ssh执行以上命令。如果不会,请先输入exit退出。
2)创建screen会话
1 |
screen -S nfs |
以上命令的意思是:新建SSH会话,名字为nfs。回车以后,系统会自动跳转到名叫nfs的screen会话,就可以在这里执行命令了。
1 |
rsync -zvrlptDP /var/www/uimg /mnt/ifs/ > /mnt/ifs/ifs.log |
3)暂时离开screen会话
在SSH窗口中按快捷键:Ctrl+a d(按住Ctrl,依次按a,再按d)即可退出名叫nfs的screen的会话。暂时离开screen会话时,screen的会话并不会因为离开而停止,正在运行中(如rsync复制文件)的进程依然会继续运行,screen的好处就是可以在同一个ssh窗口中执行多个任务,如再新开一个screen会话执行一些其他命令。当然你也可以临时关闭ssh窗口,做些其它事情。
4)重新读取screen会话
通过screen名字(如之前新建的nfs)读取。
1 |
screen -r nfs |
在SSH中执行以上命令即可读取,若忘记之前创建的screen会话的名字,可以通过一下方法查询正在运行中的screen会话。
1 2 3 4 |
$ ps aux | grep nfs root 426 0.0 0.0 0 0 ? S< May23 0:00 [nfsiod] root 1867 0.0 0.0 0 0 ? S May23 0:00 [nfsv4.0-svc] root 3413 0.0 0.0 27476 2712 ? Ss 01:00 0:00 SCREEN -S nfs |
1 2 3 4 |
$ screen -ls There is a screen on: 3413.nfs (05/24/2016 01:00:46 AM) (Detached) 1 Socket in /var/run/screen/S-root. |
5)关闭screen会话
若不再需要当前的screen会话,可以在当前的screen会话中执行exit,提示[screen is terminating]表示已经成功关闭screen会话(不会保留在内存中),如果需要,请按第一步重建。
6)screen的快捷键
正如之前讲到的Ctrl + a d 可以暂时离开当前的screen会话,同时screen还提供其它的快捷键。
Ctrl + a c :在当前screen会话中创建一个子会话
Ctrl + a w :子会话列表
Ctrl + a p :上一个子会话
Ctrl + a n :下一个子会话
Ctrl + a 0-9 :在第0窗口至第9子会话间切换