SSH 断开后任务就停了?用 tmux 让长任务在后台继续跑

举报
yd_274356910 发表于 2026/11/09 09:41:54 2026/11/09
【摘要】 在云服务器上跑过长任务的人,大概都遇到过这个场面:SSH 里启动了一个备份、一次下载或者一场压测,刚去倒杯水回来,窗口断了,任务也没了。更糟的是有时候任务不是停了,而是你不知道它到底停没停。问题出在进程和终端的绑定关系上。SSH 会话断开时,服务端会向这个会话里的前台进程发 SIGHUP,默认动作是终止进程。nohup 能顶住 SIGHUP,但它不管输出、不管交互,任务一旦要输入点什么就卡住...

在云服务器上跑过长任务的人,大概都遇到过这个场面:SSH 里启动了一个备份、一次下载或者一场压测,刚去倒杯水回来,窗口断了,任务也没了。更糟的是有时候任务不是停了,而是你不知道它到底停没停。

问题出在进程和终端的绑定关系上。SSH 会话断开时,服务端会向这个会话里的前台进程发 SIGHUP,默认动作是终止进程。nohup 能顶住 SIGHUP,但它不管输出、不管交互,任务一旦要输入点什么就卡住了。想省心,还是得用终端复用器,tmux 是最顺手的一个。

一、装一个 tmux,用一次就记住

Ubuntu/Debian:

sudo apt update && sudo apt install -y tmux

装完先看版本:tmux -V。不同发行版快捷键大同小异,本文按默认键位写。

二、三个命令 cover 90% 的场景

新建一个会话,名字取个好记的,比如正在跑的备份:

tmux new -s backup

这时候你就在一个全新的终端里了,跑你的长命令,比如:

tar -czf /backup/home-20261109.tar.gz /home

要临时离开,先按 Ctrl+b 再按 d,detach,会话留在后台继续跑。你可以安心关掉 SSH。

回来之后,先看都有哪些会话:

tmux ls

重新接回去:

tmux attach -t backup

如果只有一个会话,tmux attach 就够了。会话里的一切都还在,输出、进度、报错,一行不少。

三、窗口和分屏:一个会话当四个用

一个会话里可以开多个窗口。新建窗口:Ctrl+b 再按 c;切换窗口:Ctrl+b 再按 n(下一个)或 p(上一个);按名字跳:Ctrl+b 再按 w,会列出所有窗口让你选。

分屏也很常用。上下分:Ctrl+b 再按双引号;左右分:Ctrl+b 再按百分号。在分屏之间移动:Ctrl+b 再按方向键。需要关注的日志放一个窗格,跑任务的命令放另一个,切换的时候不用反复 attach。

四、几个容易踩的坑

第一,退出会话别用 exit。exit 是把当前 shell 退出,如果这是会话里的最后一个 shell,会话就跟着没了,里面的任务也会被收走。临时离开永远用 Ctrl+b 再按 d。

第二,会话名别太随意。backup、deploy、train 这种一眼能看懂的名字,半个月后回来 attach 才不会猜。会话太多时 tmux ls 一眼看过去就知道哪个能杀、哪个不能动。

第三,任务完成记得清理。用完的会话用 tmux kill-session -t backup 杀掉,不然攒一堆僵尸会话,排查问题的时候容易看花眼。

第四,服务器重启后会话就没了。tmux 保的是 SSH 断开,不是机器重启。真正关键的、必须断点续跑的长任务,还是要配成 systemd 服务或者写进定时任务里,tmux 只管“人不在、任务继续跑”这一层。

五、什么时候不用 tmux

交互很少、跑完就走的一次性命令,用 nohup command & 就够了;需要开机自启、失败自动拉起的服务,交给 systemd;多台机器上要定时跑的任务,用 crontab。tmux 的定位很明确:人在操作、任务要跑很久、中间可能断线。这三点都占了,再用 tmux。

一句话总结:SSH 断开不该等于任务结束。新建会话、detach、attach 三个动作,基本能解决云服务器上所有“跑一半被断开”的烦恼。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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