断线也不怕:用 tmux 会话保持远程长任务并随时恢复
远程跑一个耗时任务,最怕的不是任务慢,而是网络一断、终端一关,任务就跟着没了。tmux 的思路很简单:把任务放在服务器上的一个会话里跑,终端只是去“看”这个会话,断线后重新连回去,会话和任务都还在。
先装好,再养成习惯
在 Debian/Ubuntu 上安装只需要一条命令:
sudo apt update && sudo apt install -y tmux
建议每次要跑长任务时,先给会话起一个有意义的名字,而不是用默认编号:
tmux new -s build
名字能帮你在几天后一眼认出这个会话是干什么的,远比记住数字可靠。
断线、关机、再回来
会话里启动任务后,按 Ctrl+B 再按 D,就可以把会话留在后台,自己先断开连接。之后无论是网络波动,还是本地电脑关机重启,服务器上的任务都不会因为终端关闭而中断。
重新登录服务器后,用下面这条命令回到原来的会话:
tmux attach -t build
如果一时想不起名字,先列出所有会话再挑:
tmux ls
一个会话里分屏看日志和进度
长任务常常需要一边跑、一边看输出。tmux 可以在一个窗口里分屏:Ctrl+B 再按 % 是左右分屏,Ctrl+B 再按 " 是上下分屏,Ctrl+B 再按方向键可以在窗格之间切换。
一个实用的分工是:左边的窗格跑任务,右边的窗格用 tail -f 看日志,或者随时检查磁盘和进程状态。这样不用反复开多个 SSH 连接,也不用在多个终端窗口之间来回找。
任务跑完后记得收尾
任务结束、结果已经确认后,再退出并清理会话,避免服务器上长期堆积无用的会话:
tmux kill-session -t build
如果只是暂时离开,detach 就够了;只有确定不再需要时,才 kill 会话。
几个容易踩的坑
第一,不要在会话里再套一层会话,嵌套后快捷键会变得很难分辨,退出时也容易误杀外层会话。第二,重要任务仍要把输出写到日志文件里,tmux 只能保证会话不随终端消失,不能替代日志留存。第三,会话名不要用含义不清的临时名字,否则过一段时间自己也分不清哪个会话对应哪个任务。
小结
把“终端连接”和“任务运行”分开,是远程运维里一个很小的习惯改变,却能省下很多重跑任务的时间。新建一个命名会话、detach 离开、attach 回来、分屏查看进度、做完清理,这一套流程熟练后,远程长任务就不再依赖本地网络是否稳定了。
- 点赞
- 收藏
- 关注作者
评论(0)