大佬教程收集整理的这篇文章主要介绍了通过screen解决终端模拟器断开连接之后丢失会话的问题,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
当使用XsHell、putty、SecureCRT等终端模拟器远程连接至Linux服务器时,如果需要执行一个耗时很长的命令或脚本,在尚未执行完毕之前,客户端突然断开网络连接,或者终端模拟器发生死锁,此时客户端便会失去先前和Linux服务器建立的会话。由于不能实时查看脚本或命令的执行日志,因此也就很难判断它们的执行状态,应该如何解决这个问题呢?
使用screen工具可以解决这个问题!screen是@R_696_4444@一种多重窗口管理器。当终端模拟器通过telnet或ssh远程登录至Linux服务器时,如果网络连接非正常中断,那么客户端可以通过screen工具重新连接至Linux服务器,恢复先前的网络会话。screen具有以下三个主要功能:
会话恢复
只要screen自身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用 —— 即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r
命令就可以恢复先前会话的运行。同样在暂时离开的时候,也可以执行分离命令detach
,在保证里面的程序正常运行的情况下让screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。
多重窗口
在screen环境下,所有的会话都会独立运行,并且拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口之间切换,并且可以自由地重定向各个窗口的输入和输出。screen实现了基本的文本操作,如复制和粘贴等;还提供了类似滚动条的功能,可以查看窗口状况的历史记录。窗口还可以被分区和命名,还可以监视后台窗口的活动。
会话共享
screen可以让一个或多个用户从不同终端多次登录同一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。
screen具有两种使用方式:
screen [-opts] [cmd [args]]
其中,opts是可选参数,cmd是可选的待执行命令,args是待执行命令的参数。
screen -r [host.tty]
其中,host.tty是先前建立的会话名称。
screen具有以下的可选参数:
在每个screen会话中,所有的命令都以ctrl+a
(C-a
) 开始:
fg
命令则可以切换回去。screen会话还有一种特殊的工作模式,叫做拷贝模式(copy mode)。在 拷贝模式中,可以进行回滚、搜索、复制等操作,就像用使用vi一样:
CentOS的官方镜像源自带screen工具,可以@R_722_6749@安装:
yum install -y screen
安装完成之后,检查screen版本,如下图所示:
@L_616_76@
screen -S <session_name>
其中,session_name就是指定的会话名称。进入screen会话时,会创建第一个窗口,也就是“screen 0”,并且打开系统默认的SHell,一般是Bash。因此,在执行上述命令之后,会立刻又返回至命令提示符,就好像什么都没有发生,但实际上已经进入screen会话了。
另外,在执行screen命令时,还可以直接打开指定的程序:
screen <cmd [args]>
其中,cmd是指定的待执行程序名,args是待执行程序的参数。screen会创建一个执行指定程序的单窗口会话,退出这个程序就会退出相应的窗口/会话。
当在screen会话的窗口中执行耗时较长的程序时,可以不中断正在运行的程序而暂时离开(detach)screen会话,稍后还可以重新连接(attach)该会话,重新控制会话窗口中运行的程序。
例如,打开一个screen窗口,更新整个系统的组件:
screen yum update -y
这个命令的执行时间较长,此时如果需要处理别的事情,那么就需要暂时退出这个screen窗口,只需要按下快捷键“C-a d”,screen就会给出会话分离的提示,如下图所示:
在事情处理完毕之后,找到这个screen会话:
screen -ls
上述命令会列出所有的screen会话,如下图所示:
此时,便可以重新连接screen会话:
screen -r 2122
先前在screen窗口中执行命令的状态依然可见,如下图所示:
如果由于某种原因,某个会话死掉了(例如:手动杀掉该会话的进程),这时screen -ls
命令便会显示该会话为dead状态。可以使用screen -wipe
命令清除dead会话:
在screen窗口中输入exit
命令便会退出当前的screen窗口,当screen会话中的所有窗口都退出时,便会退出这个screen会话。也可以使用C-a k
快捷键退出当前的screen窗口。
如果某个程序随同screen命令同时执行,那么在这个程序运行结束时,也会自动退出相应的screen会话。
当在一个终端模拟器中进入screen会话时,在另一个终端模拟器中也可以连接至这个screen会话,运行以下命令:
screen -x [session_name]
其中,session_name就是想要连接的screen会话的名称。这个命令的效果相当于让两个人坐在同一个显示器前面,一个人的操作会同步演示给另一个人,反之亦然。
screen允许使用快捷键C-a s
锁定会话。会话锁定之后,再进行任何输入屏幕都不会再有反应了。但是要注意虽然屏幕上看不到反应,但是输入都会被screen中的进程接收到。快捷键C-a q
可以解锁一个会话。
另外,还可以使用C-a x
锁定会话。不同的是,这样锁定之后,会话会被screen所属用户的密码保护,需要输入密码才能继续访问这个会话。
在终端模拟器中,可以通过screen命令在一个已存在的screen会话中执行指定的命令,例如:
screen -S test -X screen ping www.baidu.com
这个命令会在一个名为test的screen会话中创建一个新窗口,并在其中运行ping命令。
有时候需要在同一个终端模拟器窗口中,一边执行程序,一边监控系统系统性能,这时可以将屏幕分割成不同的区域,分别显示不同的screen窗口。
例如,首先创建和进入一个名为test-screen的会话:
screen -S test-screen
然后,运行top
命令,再使用快捷键C-a S
,将屏幕水平分割,如下图所示:
由上图可知,屏幕已经分为上下两个部分,上半部分运行top
命令,下半部分是空白的。此时,使用C-a TAB
快捷键,将光标切换至下半部分,再使用C-a c
快捷键,在下半部分新建一个screen窗口,运行Bash SHell。最后,在下半部分的screen窗口中运行fdisk -l
命令,如下图所示:
可以使用C-a X
快捷键关闭光标当前所在的屏幕区块,也可以使用C-a Q
快捷键关闭除当前区块之外的其他所有区块。关闭的区块中的screen窗口并不会关闭,还可以通过窗口切换找到它。
以上是大佬教程为你收集整理的通过screen解决终端模拟器断开连接之后丢失会话的问题全部内容,希望文章能够帮你解决通过screen解决终端模拟器断开连接之后丢失会话的问题所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。