tmux 入门:SSH 断了,活儿还在——一个窗口开出多个会话
先说结论:长任务别裸奔在 SSH 会话里
在服务器上跑一个要几小时的任务,最怕的不是任务本身,而是中间网络抖一下、笔记本合盖、Wi-Fi 换个热点,SSH 一断,正在跑的进程就跟着没了。解决办法不是“祈祷网络稳定”,而是让任务脱离你这次登录会话独立活着。tmux 就是干这个的:它在服务器上维持一个会话(session),你随时可以断开、随时再接回来,会话里的程序一直在跑,输出也都保留着。
安装与第一条命令
多数发行版都有现成的包:Debian/Ubuntu 用 sudo apt install tmux,RHEL 系用 sudo dnf install tmux,macOS 用 brew install tmux。装好后先别记快捷键,先跑通最小闭环:
tmux new -s deploy
# 在里面跑你的长任务,例如 ./build.sh
# 按 Ctrl+b 再按 d,断开会话(任务继续跑)
tmux ls
tmux attach -t deploy
这个闭环就是 tmux 价值的全部:新建、断开、列出、接回。先把它练熟,再学别的。
三个概念:会话、窗口、窗格
tmux 里有三层。会话(session)是一组窗口的集合,对应“一项工作”,比如 deploy、monitor。窗口(window)是会话里的一个全屏终端,类似浏览器标签页,用 Ctrl+b c 新建、Ctrl+b n/p 切换。窗格(pane)是把一个窗口切成几块,同时看日志和命令行:Ctrl+b % 左右分,Ctrl+b " 上下分,Ctrl+b 方向键 在窗格间移动。刚开始只用会话和窗口就够了,窗格是锦上添花。
一个实用的工作流
以“在服务器上部署并观察”为例:新建一个名叫 deploy 的会话,第一个窗口跑部署脚本,第二个窗口用 tail -f 看日志,第三个窗口留着随时敲命令排查。网络断了就重新 SSH 上来,tmux attach -t deploy,三个窗口原样都在,日志也没丢。需要把会话交给同事看时,让对方用同一个账号 tmux attach -t deploy 就能看到同一块屏幕,排查时不用再互相贴日志。
常用命令速查
tmux ls:列出所有会话,看名字和窗口数。tmux new -s 名字:新建命名会话,名字比默认的数字好认。tmux attach -t 名字:接回指定会话;只有一个会话时直接tmux attach。tmux kill-session -t 名字:结束会话,里面的进程随之结束,收尾时用。Ctrl+b d:断开但不结束,任务继续跑。Ctrl+b ?:查看全部快捷键,忘了就按它。
两个坑,提前避开
第一,Ctrl+b 是前缀键:所有快捷键都要先按它,再按后面的键,初学者常把 Ctrl+b d 按成 Ctrl+d,结果是给 shell 发了退出信号。第二,嵌套 SSH 时要分清层级:在本地 tmux 里 SSH 到服务器、又在服务器里开 tmux,快捷键会先被外层截获。办法是外层用一次前缀、内层用两次,或者干脆只在服务器那一层用 tmux。
一点配置就够了
不用一上来就抄几百行的配置。先在 ~/.tmux.conf 里放两行就够:把鼠标支持打开(set -g mouse on),滚轮可以直接翻看历史输出;再把历史行数调大(set -g history-limit 20000),方便回看长日志。改完配置用 tmux source-file ~/.tmux.conf 重载,或者新开会话生效。等用顺了,再按自己的习惯加状态栏、改前缀键。
总结一句话:凡是“跑起来就不能断”的任务,先放进一个命名 tmux 会话再跑。断开只是你离开了,任务还在;接回来,现场还在。这一个习惯,能省下很多半夜重跑的麻烦。
- 点赞
- 收藏
- 关注作者
评论(0)