在工作中,ssh 登陆系统难免会开多个窗口,进行不同操作,虽然开多个ssh 窗口能解决问题,但如果发生断网之类的远程会话进行的操作也就断了,这显然不是我们想要的,毕竟进行到一半的工作不能说断就断。使用screen 命令即可解决这类问题( 前提是screen 命令不能被中断 ) 。
简单来说,Screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。Screen中有会话的概念,用户可以在一个screen会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。( 详细可以参考:https://www.ibm.com/developerworks/cn/linux/l-cn-screen/index.html )
screen 简述
开启一个screen 窗口的方式有如下:
1. 直接键入 screen 命令
centos 安装 screen 命令( yum -y install screen ) ,ubuntu 安装( sudo apt install -y screen 笔者环境 ubuntu 18.04 )。
zhang@zgp-ubuntu:~$ screen
2. screen command ( 命令)
开启screen 窗口,并且启动command 命令 ,退出该command ,screen 窗口也随之关闭。
zhang@zgp-ubuntu:~$ screen -ls
There is a screen on:
47620.pts-4.zgp-ubuntu (2019年11月17日 12时38分43秒) (Attached)
1 Socket in /run/screen/S-zhang.
zhang@zgp-ubuntu:~$ screen vim
zhang@zgp-ubuntu:~$ screen -ls
There is a screen on:
47620.pts-4.zgp-ubuntu (2019年11月17日 12时38分43秒) (Attached)
1 Socket in /run/screen/S-zhang.
zhang@zgp-ubuntu:~$
退出vim ,开启的新的窗口也随之关闭。
3. screen -S screenName ( 新建screen窗口并将之命名为screenName )
zhang@zgp-ubuntu:~$ screen -S python_test
创建一个名为 python_test 的窗口
暂时断开screen会话
ctrl + a + d 可以暂时断开screen 会话
在中断前的窗口界面,
按下: ctrl + a + d 键后输出
[detached from 66844.python_test]
screen -ls ( ls 指list ),可以查看 screen 窗口会话。
zhang@zgp-ubuntu:~$ screen -ls
There is a screen on:
66844.python_test (2019年11月17日 13时31分20秒) (Detached)
1 Socket in /run/screen/S-zhang.
screen -r 恢复窗口会话
zhang@zgp-ubuntu:~$ screen -r 66844
恢复到了中断前的窗口会话
下面试试,断网 / 不小心关闭了ssh ,看下 screen 表现如何吧
用py 累加来模拟日常工作的情况。
然后 ctrl + a + d 中断当前会话,关闭ssh ,即登陆系统( 模拟日常工作进行到一半,断网/ 不小心关闭ssh ) 。
然后再次登陆ssh
zhang@zgp-ubuntu:~$ screen -ls
There is a screen on:
66844.python_test (2019年11月17日 13时31分20秒) (Detached)
1 Socket in /run/screen/S-zhang.
可以看到之前的screen 会话并没有中断,我们试着恢复之前的会话,看下之前由于误操作有没有导致job 进度丢失。
zhang@zgp-ubuntu:~$ screen -r 66844
发现并没有中断我们之前screen会话中所进行的job 。
在我用ps 查看screen 的时候,发现多了两个看似守护进程的进程( 至于我怎么知道是守护进程,看名字应该是守护进程 )。
所以我在猜测断开 ssh ,screen 没有中断的一大原因是由于它是以守护态运行的,当然这也只是我的猜测而已。
上面只是简单的阐述了我的一点使用心得,screen 命令还是很强大的,详细的请参考:https://www.gnu.org/software/screen/manual/screen.html ,https://www.ibm.com/developerworks/cn/linux/l-cn-screen/index.html 。