用 tmux 管住长时间任务,SSH 断了也不丢进度
用 tmux 管住长时间任务,SSH 断了也不丢进度
远程服务器上跑编译、训练、数据同步或日志排查时,SSH 一断进程就没了。nohup 和 & 能保活,但要回看输出、切多个窗口就不方便。tmux 是终端多路复用器:会话挂在服务器后台,重连后还能贴回去,适合日常运维和开发。
安装与创建会话
多数发行版可直接装:
# Debian/Ubuntu
sudo apt install tmux
# RHEL/CentOS/openEuler
sudo yum install tmux
创建命名会话,进入后正常敲命令即可:
tmux new -s build
想暂时离开:按 Ctrl-b,再按 d(detach)。会话继续跑,SSH 关掉也没事。习惯给会话起有意义的名字,例如 sync-logs、train-v2,几天后回来也不至于懵。
重连与列出会话
tmux ls
tmux attach -t build
只有一个会话时,tmux a 就够。注意:机器重启后内存里的会话会消失,真正要长期保活的任务仍应写成 systemd 服务或可重启的脚本;tmux 更适合「人还在跟」的中长任务。
分屏与切窗
前缀键默认是 Ctrl-b,松开后再按功能键:
%:左右分屏":上下分屏- 方向键:在窗格间移动
c:新建窗口;n/p:下一个 / 上一个窗口,:给当前窗口改名x:关掉当前窗格(需确认)
分屏后可以一边 tail -f 看日志,一边改配置或跑命令,不必开多个 SSH 客户端来回切。
复制模式与滚动回看
输出一刷而过时:Ctrl-b [ 进入复制模式,用方向键或 PageUp/PageDown 翻页,q 退出。需要复制一段文本时,在复制模式里用空格标记起点、回车结束(具体键位随版本略有差异),再在别的窗格 Ctrl-b ] 粘贴。
脚本里非交互创建
cron 或部署脚本可以后台拉起会话:
tmux new-session -d -s nightly './nightly.sh >>/var/log/nightly.log 2>&1'
-d 表示创建后不附着。查进度时再 tmux attach -t nightly。任务结束后记得 tmux kill-session -t nightly,避免残留空会话。
和 screen / systemd 怎么选
- 临时交互、要分屏看日志:优先
tmux - 服务级守护、开机自启、崩溃拉起:用
systemd - 老环境只有
screen:也能 detach/attach,但分窗和配置不如tmux顺手
不必把所有进程都塞进 tmux;把「人还要盯一会儿」的工作放进去,收益最大。
常见坑
- 前缀键冲突:不少人把
Ctrl-b改成Ctrl-a(screen 习惯)。改完记得同步到所有机器的~/.tmux.conf,否则手感不一致。 - 嵌套 tmux:在已有会话里再 SSH 到另一台又开 tmux,前缀键会「吃」在外层。外层先按一次前缀再按
Ctrl-b(或你改过的键)才能把前缀传给内层;更干净的做法是内层换不同前缀。 - 会话太多:长期
new不清理会留下一堆 dead 会话。定期tmux ls,不用的tmux kill-session -t 名字。 - 权限与用户:用 root 开的会话,普通用户
attach不上;反之亦然。按实际登录用户创建会话即可。
把这些习惯定下来,远程排障会轻松很多。
本地开发也可以开一个常驻 dev 会话,里面分屏跑前端、后端和日志,比开三个终端标签更不容易搞丢。团队协作时,在文档里写清「用哪个会话名、如何 attach」,能减少新人上手成本。
小结
tmux 解决三件事:断线保活、多窗口并行、离开再回来接着看。上手只记 new、detach、attach 和分屏快捷键就够日常用。再往后可以改 ~/.tmux.conf 自定义前缀键和状态栏,但多数场景默认配置已经够用。
- 点赞
- 收藏
- 关注作者
评论(0)