原创系统笔记

Linux实现不间断会话服务

本文阅读 9 分钟
首页 系统笔记 正文

如果正在使用命令来打包文件,或者正在使用脚本安装某个服务程序,中途是绝对不能关闭在本地打开的终端窗口或断开网络连接的,甚至连网速的波动都有可能导致任务中断,此时只能重新进行远程连接并重新开始任务。

还有,正在执行文件打包操作,同时又想用脚本来安装某个服务程序,这时会因为打包操作的输出信息占满用户的屏幕界面,而只能再打开一个执行远程会话的终端窗口。时间久了,难免会忘记这些打开的终端窗口是做什么用的了。

Terminal Multiplexer(终端复用器,简称为 Tmux)是一款能够实现多窗口远程控制的开源服务程序。简单来说就是为了解决网络异常中断或为了同时控制多个远程终端窗口而设计的程序。用户还可以使用 Tmux 服务程序同时在多个远程会话中自由切换,能够实现如下功能:

  • 即便网络中断,也可让会话随时恢复,确保用户不会失去对远程会话的控制。
  • 每个会话都是独立运行的,拥有各自独立的输入输出终端窗口,终端窗口内显示过的信息也将被分开隔离保存,以便下次使用时依然能看到之前的操作记录。
  • 当多个用户同时登录到远程服务器时,便可以使用会话共享功能让用户之间的输入输出信息共享。

在 RHEL 8 系统中,默认没有安装 Tmux 服务程序,因此需要配置软件仓库来直接开始安装 Tmux:

[RS@ ~]# dnf install tmux   //安装 Tmux

管理远程会话

Tmux 服务能做的事情非常多,例如创建不间断会话、恢复离线工作、将界面切分为不同的窗格、共享会话等。下面直接敲击 tmux 命令进入会话窗口中

不难发现,会话窗口的底部出现了一个绿色的状态栏,里面分别显示的是会话编号、名称、主机名及系统时间。

退出会话窗口的命令是 exit ,敲击后即可返回到正常的终端界面。

会话窗口的编号是从 0 开始自动排序(即 0、1、2、3、……),会话窗口数量少的时候还没关系,数量多的时候区分起来就很麻烦了。接下来创建一个指定名称为 backup 的会话窗口。

[RS@ ~]# tmux new -s backup   //创建指定名为 backup 的会话窗口

假设突然要去忙其他事情,但会话窗口中执行的进程还不能被中断,此时便可以用 detach 参数将会话隐藏到后台。虽然看起来与刚才没有不同,但实际上可以看到当前的会话正在工作中:

[RS@ ~]# tmux detach   //将窗口隐藏后台运行

如果觉得每次输入 detach 参数都很麻烦,可以直接关闭中断窗口(这与进行远程连接时突然断网具有相同的效果),Tmux 服务程序会自动帮我们进行保存。

这样操作之后,服务和进程都会一直在后台默默运行,不会因为窗口被关闭而造成数据丢失。不放心的话可以查看一下后台有哪些会话:

[RS@ ~]# tmux ls   //查看后台运行的会话

回归到backup会话中的方法很简单,在 tmux 命令后面加 attach 和会话编号或会话名称就可以。关闭会话窗口之前正在进行的一切工作状态都会被原原本本地呈现出来,丝毫不受影响:

[RS@ ~]# tmux attach -t backup   //恢复后台会话

如果不再需要使用这个 Tmux 会话了,也不用先在 tmux 命令后面添加 attach,再执行 exit命令退出,而是可以直接使用 kill 命令杀死这个会话。

[RS@ ~]# tmux ls    //查看后台运行的会话
backup: 1 windows (created Wed Dec 21 04:38:06 2022) [80x23]
[RS@ ~]# tmux kill-session  -t backup   //彻底关闭一个指定会话

管理多窗格

在实际工作中,一个 Shell 终端窗口总是不够用,这怎么办呢?

Tmux 服务有个多窗格功能,能够把一个终端界面按照上下或左右进行切割,从而使得能同时做多件事情,而且之间互不打扰,特别方便。

先创建一个 tmux 会话。使用 “ tmux split-window ”命令可以创建上下切割的多窗格终端界面,使用 “tmux split-window -h ”命令可以创建左右切割的多窗格终端界面。退出时执行 exit 命令即可。

命令作用
tmux select-pane -U切换至上方的窗格
tmux select-pane -D切换至下方的窗格
tmux select-pane -L切换至左方的窗格
tmux select-pane -R切换至右方的窗格

Tmux 服务为用户提供了一系列快捷键来执行窗格的切换。方法是先同时按下 Ctrl+B 组合键,然后松手后再迅速按下其他后续按键,而不是一起按下。用于操作会话窗格的常见快捷键如表所示。

快捷键作用
%划分为左右两个窗格
"划分为上下两个窗格
<方向键>切换到上下左右相邻的一个窗格
;切换至上一个窗格
o切换至下一个窗格
{将当前窗格与上一个窗格位置互换
}将当前窗格与下一个窗格位置互换
x关闭窗格
!将当前窗格拆分成独立窗口,而不在与其他窗格同处一个界面
q显示窗格编号

会话共享功能

Tmux 服务不仅可以确保用户在极端情况下也不丢失对系统的远程控制,保证了生产环境中远程工作的不间断性,而且它还具有会话共享、分屏切割窗格、会话锁定等实用的功能。

其中,会话共享功能是一件很酷的事情,当多个用户同时控制服务器的时候,它可以把服务器屏幕内容共享出来。也就是说,每个用户都能够看到相同的内容,还能一起同时操作。

要实现会话共享功能,首先使用 ssh 服务将客户端 A 远程连接到服务器,随后使用 Tmux服务创建一个新的会话窗口,名称为 share:

[RS@clientA root]# ssh 192.168.8.10  //远程连接安装Tmux了的服务器
[RS@clientA ~]# tmux new -s share    //创建一个新的会话窗口名为 share

使用 ssh 服务将客户端 B 也远程连接到服务器,并执行获取远程会话的命令。接下来,两台客户端就能看到相同的内容了。

[RS@clientB root]# ssh 192.168.8.10   //远程连接安装Tmux了的服务器
[RS@clientB ~]# tmux attach-session -t share   //连接名为 share 的会话窗口
原创文章,作者:張旭,如若转载,请注明出处:http://www.zxbke.cn/68.html/

发表评论