SSH 一断长任务就没了:用 tmux 让会话在后台接着跑

举报
yd_294877891 发表于 2026/11/13 09:01:36 2026/11/13
【摘要】 在服务器上跑一个要花半小时的备份或编译,SSH 刚连上、命令刚敲下去,网络一抖、窗口一关,任务就跟着断了。重新连上去一看,进程早已不在,只能从头再跑一遍。问题不在命令本身,而在会话:SSH 断开时,终端会话里的前台进程会收到挂断信号,默认随之退出。解决办法是把任务放进一个能脱离终端独立存在的会话里,tmux 就是干这个的。 新建会话,任务跟会话走先装上它:sudo apt install t...

在服务器上跑一个要花半小时的备份或编译,SSH 刚连上、命令刚敲下去,网络一抖、窗口一关,任务就跟着断了。重新连上去一看,进程早已不在,只能从头再跑一遍。问题不在命令本身,而在会话:SSH 断开时,终端会话里的前台进程会收到挂断信号,默认随之退出。解决办法是把任务放进一个能脱离终端独立存在的会话里,tmux 就是干这个的。

新建会话,任务跟会话走

先装上它:sudo apt install tmux(Debian/Ubuntu)或 sudo dnf install tmux(RHEL 系)。装好后敲:

tmux new -s backup

-s backup 是给会话起个名字,之后找它就靠这个名字。会话里就是一个普通的终端,该敲什么敲什么,比如启动备份脚本。任务跑起来之后,按 Ctrl+b 再按 d,就把会话“分离”(detach)了:终端回到 SSH 原来的提示符,tmux 会话和里面的任务继续在后台跑。SSH 断不断线,已经和它没关系了。

回来之后,接回原来的会话

第二天重新 SSH 登录,先看有哪些会话还在:

tmux ls

输出里会列出会话名和创建时间。接回去很简单:

tmux attach -t backup

如果只有一个会话,连名字都可以省,tmux attach 直接接回。屏幕上就是你离开时的样子:备份脚本跑到哪一行、输出了什么,都原样保留。接回、看一眼进度、再 Ctrl+b d 分离,整个过程不用动正在跑的任务。

一个会话里不止能做一件事

tmux 会话里可以开多个窗口和窗格,各做各的事,互不干扰:

  • Ctrl+b c:新建一个窗口,比如一个窗口跑备份、另一个窗口看日志。
  • Ctrl+b n / Ctrl+b p:在窗口之间前后切换。
  • Ctrl+b %:把当前窗口左右分成两个窗格;Ctrl+b " 是上下分;Ctrl+b 方向键在窗格之间移动。
  • Ctrl+b x:关闭当前窗格;Ctrl+b &:关闭当前窗口。

窗口和窗格只是组织方式,真正重要的是:它们都属于同一个会话,SSH 断了整个会话都在,回来全部接得上。

两个容易踩的坑

第一,退出会话和分离会话不是一回事。在 tmux 里敲 exit 是结束当前终端,窗口里的终端全退出了,会话也就没了;要离开请用 Ctrl+b d 分离。想彻底结束一个会话,用 tmux kill-session -t backup,或者在会话里把所有窗口都 exit 掉。

第二,翻历史输出要进“复制模式”:按 Ctrl+b [,然后用方向键或 PageUp/PageDown 翻页,看到要找的内容后按 q 退出。直接用鼠标滚轮在很多终端里是翻不动 tmux 内容的,第一次用的人常以为输出丢了,其实只是没进复制模式。

小结

长任务怕的不是跑得慢,而是 SSH 一断就前功尽弃:tmux new -s 名字 新建会话、Ctrl+b d 分离、tmux ls 查看、tmux attach -t 名字 接回,四个动作就能让任务脱离 SSH 会话独立运行。窗口和窗格用来在一个会话里并行做几件事,复制模式用来翻历史输出。以后再遇到“跑半小时的任务”,先开 tmux 再敲命令,网络抖动就不再是事故了。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。