一、问题描述
我们公司使用Teleport连接到远程服务器上,然后执行相关操作如执行很久的代码任务。但是长时间就会被自动结束掉,可能需要挂载几天的那种,经常会自动中断,又可能,如果当前网络不稳定,或者本机出现故障,导致链接失败,命令被迫停止等。
二、解决办法
那么如何解决这种问题呢,这时我们需要一个可以持续性保持会话的服务,来随时保证Session连接,不会影响正常服务。有两种方法,screen和tmux(推荐)
方法一(screen):
#安装screen
yum install screen
常用参数说明:
screen -S name -> 新建一个叫name的session
screen -ls -> 列出当前所有的session
screen -r name -> 回到name这个session
screen -d name -> 远程detach某个session
screen -d -r name -> 结束当前session并回到name这个session
说明:只要Screen本身没有中止,即进程仍在,其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行,但是才使用一段时间后,不知道怎么回事screen被服务器kill掉了
方法二(tmux):
tmux工具可以实现在同一个会话中进行多窗口的显示的功能
特点:
- 可以让新窗口接入已经存在的会话。
- 允许每个会话有多个连接窗口,因此可以多人实时共享会话。
- 在单个会话窗口中,可以分割成多个窗口,相当于之前访问的多个会话。支持窗口任意的垂直和水平拆分
安装:
sudo yum install tmux
常用操作参数:
# 查看有所有tmux会话
指 令:tmux ls
快捷键:Ctrl+b s
# 新建tmux窗口
指 令:tmux new -s <session-name>
# 重命名会话
指 令:tmux rename-session -t <old-name> <new-name>
快捷键:Ctrl+b $
# 分离会话
指 令:tmux detach 或者使用 exit(关闭窗口)
快捷键:Ctrl+b d
# 重新连接会话
指 令:tmux attach -t <session-name> 或者使用 tmux at -t <session-name>
#平铺当前窗格
快捷键:Ctrl+b z (再次 Ctrl+b z 则恢复)
# 杀死会话
指 令:tmux kill-session -t <session-name>
# 切换会话
指 令:tmux switch -t <session-name>
# 划分上下两个窗格
指 令:tmux split
快捷键:Ctrl+b “
# 划分左右两个窗格
指 令:tmux split -h
快捷键:Ctrl+b %
# 光标切换到上方窗格
指 令:tmux select-pane -U
快捷键:Ctrl+b 方向键上
# 光标切换到下方窗格
指 令:tmux select-pane -D
快捷键:Ctrl+b 方向键下
# 光标切换到左边窗格
指 令:tmux select-pane -L
快捷键:Ctrl+b 方向键左
# 光标切换到右边窗格
指 令:tmux select-pane -R
快捷键:Ctrl+b 方向键右
快捷键:
在tmux窗口中,Ctrl+b激活控制台
? 列出所有快捷键;按q返回
d 脱离当前会话;这样可以暂时返回Shell界面,输入tmux attach能够重新进入之前的会话
D 选择要脱离的会话;在同时开启了多个会话时使用
Ctrl+z 挂起当前会话
r 强制重绘未脱离的会话
s 选择并切换会话;在同时开启了多个会话时使用
: 进入命令行模式;此时可以输入支持的命令,例如kill-server可以关闭服务器
[ 进入复制模式;此时的操作与vi/emacs相同,按q/Esc退出
~ 列出提示信息缓存;其中包含了之前tmux返回的各种提示信息
'''窗口操作'''
c 创建新窗口
& 关闭当前窗口
数字键 切换至指定窗口
p 切换至上一窗口
n 切换至下一窗口
l 在前后两个窗口间互相切换
w 通过窗口列表切换窗口
, 重命名当前窗口;这样便于识别
. 修改当前窗口编号;相当于窗口重新排序
f 在所有窗口中查找指定文本
'''面板操作'''
” 将当前面板平分为上下两块
% 将当前面板平分为左右两块
x 关闭当前面板
! 将当前面板置于新窗口;即新建一个窗口,其中仅包含当前面板
Ctrl+方向键 以1个单元格为单位移动边缘以调整当前面板大小
Alt+方向键 以5个单元格为单位移动边缘以调整当前面板大小
Space 在预置的面板布局中循环切换;依次包括even-horizontal、even-vertical、main-horizontal、main-vertical、tiled
q 显示面板编号
o 在当前窗口中选择下一面板
方向键 移动光标以选择面板
{ 向前置换当前面板
} 向后置换当前面板
Alt+o 逆时针旋转当前窗口的面板
Ctrl+o 顺时针旋转当前窗口的面板
技巧:
ctrl+b 然后按下shift+:在下面输入set -g mouse on 然后就可以鼠标操作了