ssh断线也不要紧【screen使用教程】
linux服务器管理员经常会遇到的一个问题:在用ssh远程连接linux服务器编译安装程序的时候,或者复制大文件夹的时候网络突然断开,服务器上执行的命令也突然停止,只能重新连接,重新从头开始操作。避免这种问题不止一个方法,有用&让程序在后台运行或者用nohup,今天要说的是 screen,screen是一个远程会话管理工具,基本上所有linux上都自带。
screen命令简介:
screen是一个可以在多个进程之间多路复用一个物理终端的全屏窗口管理器。screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/ssh连接窗口一样。
screen命令使用方法:
常用的使用方法
用来解决文章开始我们遇到的问题,比如在编译安装mysql时。
创建screen会话
可以先执行:screen -S fcbu.com_mysql ,screen就会创建一个名字为fcbu.com_mysql的会话。
暂时离开,保留screen会话中的任务或程序
当需要临时离开时(会话中的程序不会关闭,仍在运行)可以用快捷键Ctrl a d(即按住Ctrl,依次再按a,d)
恢复screen会话
当回来时可以再执行执行:screen -r fcbu.com_mysql 即可恢复到离开前创建的fcbu.com_mysql会话的工作界面。如果忘记了,或者当时没有指定会话名,可以执行:screen -ls ,screen会列出当前服务器上存在的会话列表,如下图:
31695.fcbu.com_mysql即为刚才的screen创建的fcbu.com_mysql会话,现在的状态是Attached,说明现在是在用这个会话的,如果断开过,再用screen -ls查询的话状态会显示为Detached,,31695是这个screen的会话的进程ID,恢复会话时也可以使用ID来替代会话名称:screen -r 31695
关闭screen的会话
和linux里面很多程序一样,离开的时候输入exit 再回车就行了:会提示:[screen is terminating],表示已经成功退出screen会话。
多人观看(观战)
打牌/下棋的时候旁边往往会有很多人观看,这个也不例外,screen可以实现多人观看,例如教学的时候,首先老是先在服务器上执行 screen -S fcbu.com_test 创建一个screen会话,学生连接到远程服务器上执行screen -x fcbu.com_test,接下来老师在上面执行和返回的所有信息学生从自己电脑上都可以看到了,并且是和老师同步的。
强制断开screen活动链接
有时候因为网络差,断网了,重新链接上后执行screen -r fcbu.com_mysql 会出现类似这样的错误:There is no screen to be detached matching fcbu.com_mysql
用screen -ls 查看一下,看到 fcbu.com_mysql的状态是(Attached),因为是活动的,所以就链接不上了,这个时候要强制他断开:
screen -d fcbu.com_mysql
然后再使用恢复命令 screen -r fcbu.com_mysql 恢复就ok了
强制杀掉Attached状态的screen
经常会遇到screen -r进不去之前的会话了,screen已经处于Attached状态了,并且尝试screen -r -d id 也无效,这种时候很不爽,解决办法如下:
首先screen -ls 找到所有screen,并且找到想要杀掉的screen的id
然后执行 screen -X -S 想要杀掉的screen的id quit
[root@fcbu.com ~]# screen -ls
There is a screen on:
11838.rebuild (Attached)
1 Socket in /var/run/screen/S-root.
[root@fcbu.com ~]# screen -X -S 11838 quit
[root@fcbu.com ~]# screen -ls
No Sockets found in /var/run/screen/S-root.
常用快捷键
Ctrl a c :在当前screen会话中创建窗口
Ctrl a w :窗口列表
Ctrl a n :下一个窗口
Ctrl a p :上一个窗口
Ctrl a 0-9 :在第0个窗口和第9个窗口之间切换
安装screen命令:
上面说到了基本上所有linux上都自带screen命令,假如你的服务器真没有screen的话,那可以安装一下:
Debian或Ubuntu系统执行:apt-get install screen
CentOS系统可以执行:yum install screen