SSH 一断,跑着的任务就没了?tmux 把会话留下来

举报
yd_282084356 发表于 2026/11/06 09:29:59 2026/11/06
【摘要】 SSH 连上服务器,跑一个要半小时的任务,本地网络一闪断,终端跟着断了,任务也没了。这种事遇到一次,就会想找个办法让命令和终端解绑。tmux 就是干这个的:它在服务器上开一个会话,命令跑在会话里,终端只是连上去看一眼,随时可以断开、随时可以回来。 先理解 tmux 的一层关系tmux 里有三层:服务器、会话、窗口。服务器是后台常驻的进程,一个用户通常只有一个;会话是工作的单位,一个会话可以对...

SSH 连上服务器,跑一个要半小时的任务,本地网络一闪断,终端跟着断了,任务也没了。这种事遇到一次,就会想找个办法让命令和终端解绑。tmux 就是干这个的:它在服务器上开一个会话,命令跑在会话里,终端只是连上去看一眼,随时可以断开、随时可以回来。

先理解 tmux 的一层关系

tmux 里有三层:服务器、会话、窗口。服务器是后台常驻的进程,一个用户通常只有一个;会话是工作的单位,一个会话可以对应一个任务;窗口是会话里的分屏,一个会话可以开多个窗口,每个窗口里跑不同的命令。窗口里还能再分窗格,左右或上下并排看。

平时只用记住会话这一层就够了:开一个会话,在里面跑任务,断开,下次再接回来。

开一个会话,跑一个长任务

登录服务器后执行:

tmux new -s backup

这就新建了一个名叫 backup 的会话,并自动接进去。在里面正常跑你的命令,比如一个要跑二十分钟的备份脚本。跑起来之后,按 Ctrl+b 再按 d,就从这个会话断开了。注意,断开不是退出,会话还在服务器上跑,脚本也继续跑。

这时候哪怕你关掉本地终端、合上笔记本,服务器上的 backup 会话都还在。

回来接上,看看跑完了没有

下次再登录服务器,执行:

tmux ls

列出当前所有会话。再执行:

tmux attach -t backup

就回到了 backup 会话里,屏幕上正是你离开时的样子,命令的输出都在。如果脚本已经跑完,退出码和最后几行日志也都在,不用再去翻日志文件确认。

如果当时开会话没起名字,可以用 tmux ls 看到的编号来接,比如 tmux attach -t 0。

一个会话里开多个窗口

一个会话不只放一个任务。会话里按 Ctrl+b 再按 c,新建一个窗口;按 Ctrl+b 再按 n 切换到下一个窗口,按 Ctrl+b 再按 p 回到上一个。窗口之间互不干扰,一个窗口跑备份,另一个窗口可以看日志。

如果想在一个窗口里左右并排看两个命令,按 Ctrl+b 再按 % 是左右分窗格,按 Ctrl+b 再按 " 是上下分窗格。光标在窗格之间用 Ctrl+b 加方向键切换。

任务跑完了,会话怎么收尾

任务结束、确认结果后,在会话里直接输入 exit,当前窗口就关了;一个会话的最后一个窗口关掉,会话也就自动结束了。也可以在外面用命令关掉:

tmux kill-session -t backup

不用的会话及时清理,免得 tmux ls 里攒一堆没人管的会话。还有一个容易踩的点:会话名别起得太随意,backup、build、deploy 这种见名知意的最好,过一周再回来,一眼就知道每个会话是干什么的。

两个容易踩的坑

第一个坑:在会话里又开了一个 tmux。登录服务器后,如果已经在某个 tmux 会话里,再执行 tmux new 会再套一层,快捷键会先被外层截住,里面的会话收不到。办法是先 tmux ls 确认自己是不是已经在会话里,尽量用 attach 回到已有会话,而不是新建。

第二个坑:把会话当成后台任务的万能替代。tmux 保的是“你回来还能看到”,不是“服务器重启后还在”。服务器重启后,会话和里面的进程都会消失。需要跨重启常驻的服务,还是应该写成 systemd 服务。tmux 管的是交互式长任务,不是系统服务。

用下来会发现,tmux 的价值不在功能多,而在心态变了:不用再盯着一个终端等命令跑完,也不用担心网络抖动。任务交给会话,人随时可以走开,回来再看结果就行。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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