tmux 会话保活实战:SSH 断线也不丢工作区
远程登录服务器最恼人的事,不是命令写错,而是网一抖,正在跑的编译、日志跟踪和半写的配置一起没了。tmux 把终端会话留在服务器上:你自己掉线,它还在;再连回去,屏幕、分屏和滚动历史都还在原处。
安装与第一次进入
多数发行版软件源里就有:
# Debian/Ubuntu
sudo apt-get update && sudo apt-get install -y tmux
# RHEL/CentOS/Rocky
sudo yum install -y tmux
装好后直接开一个有名字的会话,比默认的数字编号好找:
tmux new -s ops
之后日常进出只用两句:
# 暂时离开,会话继续在后台跑
# 快捷键:Ctrl-b 再按 d(detach)
tmux attach -t ops
tmux ls 能列出当前所有会话。同名会话已经存在时,用 attach 而不是再 new,避免误开一份空会话。
最常用的快捷键
tmux 的前缀键默认是 Ctrl-b,先按它,再按后面那个键:
・d:脱离会话,进程不停
・c:新建窗口;n / p 在窗口间切换;, 给窗口改名
・%:左右分屏;":上下分屏
・方向键:在窗格之间跳转
・z:把当前窗格临时放大,再按一次恢复
・[:进入滚动模式,用方向键或 PageUp 翻历史,q 退出
分屏后经常要调大小:前缀键之后按住 Ctrl 再按方向键即可。一边跟日志、一边改配置时,这个比开多个 SSH 窗口稳得多。
让长任务在掉线后继续跑
编译、备份、数据迁移这类命令,不要直接丢在普通 SSH 里。正确顺序是:先 tmux attach(或 new)进入会话,再启动命令。万一断线,服务器上的 tmux 进程还在,命令不会收到 SIGHUP。
回来之后:
tmux attach -t ops
如果暂时不确定会话名:
tmux ls
tmux attach -t 会话名
不要用 nohup 和 tmux 叠床架屋;需要交互、分屏和回看输出时,只用 tmux 就够。
一点省事的配置
把下面几行放进 ~/.tmux.conf,下次进入会话后执行 tmux source-file ~/.tmux.conf 即可生效:
set -g mouse on
set -g history-limit 50000
set -g prefix C-b
setw -g mode-keys vi
mouse on 方便用滚轮翻历史、点选窗格;history-limit 避免排障时关键日志被挤出缓冲区。配置文件写错导致会话异常时,可以先 tmux -f /dev/null new -s rescue 开一个不读配置的急救会话。
排错速查
・failed to connect to server:当前用户下没有正在运行的 tmux server,用 new 而不是 attach。
・attach 进去是空白:可能连到了另一个会话,先 tmux ls 核对名字。
・前缀键没反应:确认没有把 Ctrl-b 改成别的键,或当前焦点其实不在 tmux 里。
・权限不够:tmux socket 在 /tmp/tmux-用户ID/ 下,不要用错用户去 attach。
把关键操作放进命名会话,再养成 detach 而不是直接关终端的习惯,远程排障会稳很多。断线不再等于前功尽弃,这就是 tmux 最值的那一点。
- 点赞
- 收藏
- 关注作者
评论(0)