SSH 断线任务就没了?tmux 让你的命令一直在跑

举报
yd_265618206 发表于 2026/10/24 10:39:54 2026/10/24
【摘要】 做后端开发,经常要 SSH 到服务器上跑一个耗时任务:导数据、跑脚本、压测,一跑就是几个小时。我的噩梦经历:有一次导库导到一半,家里的 Wi-Fi 闪断了一下,SSH 一断,导入进程直接被杀,几个小时白跑。后来同事教我用 tmux,这类问题就再没发生过。这篇把 tmux 最实用的用法写下来,给还在用"SSH 一直开着不敢关"的人参考。 tmux 是什么简单说,tmux 是一个"终端会话管理器...

做后端开发,经常要 SSH 到服务器上跑一个耗时任务:导数据、跑脚本、压测,一跑就是几个小时。我的噩梦经历:有一次导库导到一半,家里的 Wi-Fi 闪断了一下,SSH 一断,导入进程直接被杀,几个小时白跑。后来同事教我用 tmux,这类问题就再没发生过。这篇把 tmux 最实用的用法写下来,给还在用"SSH 一直开着不敢关"的人参考。

tmux 是什么

简单说,tmux 是一个"终端会话管理器"。它在服务器上创建一个独立的会话,你在这个会话里跑的命令,和你的 SSH 连接是解耦的:SSH 断了,会话还在服务器上活着,里面的进程照常运行;你重新连上服务器,再"接回"这个会话,画面和断开前一模一样。

三个命令,上手就够

创建一个新会话(给它起个名字,方便找回):

tmux new -s deploy

这时候你就在新会话里了,正常跑你的耗时命令就行。想暂时离开这个会话、回到普通终端,按 Ctrl+b 再按 d(detach,分离)。屏幕一闪,你就回到了原来的终端,而会话里的任务还在后台跑。

第二天重新 SSH 上服务器,接回会话:

tmux attach -t deploy

画面回来了,任务进度都在。就这么简单:建会话、分离、接回,日常 90% 的场景只用这三个动作。

常用操作速查

会话多了,记不住名字,用这条列出所有会话:

tmux ls

输出类似 deploy: 1 windows (created ...)。想结束一个会话,先接回去,在里面输入 exit,或者直接杀掉:

tmux kill-session -t deploy

还有一个很多人不知道的技巧:在一个会话里按 Ctrl+b 再按 "(双引号),屏幕会上下分成两个窗格;Ctrl+b 再按 % 是左右分屏。用方向键配合 Ctrl+b + 方向键在窗格间切换。一边 tail 日志、一边跑命令,不用来回开多个 SSH 窗口。

我踩过的两个坑

第一个坑:直接关掉 SSH 客户端窗口(比如笔记本合盖),而不是先 detach。虽然 tmux 会话本身不受影响,但如果你在会话里跑的是交互式程序(比如需要输入 yes/no 的安装脚本),它会卡在那里等你输入,你接回去才能继续。所以长时间任务尽量用非交互模式跑,或者把输入提前准备好。

第二个坑:服务器重启。tmux 会话是保存在内存里的,机器一重启就没了。它防的是"网络断线",不是"机器重启"。如果你的任务真的跑了十几个小时,重要的中间结果还是要落盘,别全指望会话。

写在最后

tmux 解决的是一个很具体但很痛的场景:SSH 连接不可靠,但服务器上的任务必须可靠。建会话、分离、接回,三步记住,断线再也不是灾难。更进一步的话,可以学学它的窗口(window)和窗格(pane)管理,或者配合 tmux-resurrect 插件实现会话持久化,连重启都不怕。不过对大多数人来说,先把 detach 和 attach 用熟,收益已经足够大了。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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