用 tmux 让远程任务不断线:会话、窗口与新手避坑
远程跑耗时任务,最怕 SSH 一断任务跟着停:网络一抖、笔记本一合盖,终端里的程序就没了。tmux 把任务放在服务器会话里跑,终端只是查看窗口,断线不等于任务结束。
先理解一个关系:tmux 会话独立于 SSH 连接。新建会话后,哪怕你把终端关掉,会话还在服务器后台继续跑;下次再连上来,重新接回这个会话,就能看到任务跑到哪一步了。这比每次都祈祷网络不断要可靠得多。
上手只要三步。第一步,在服务器上新建一个见名知义的会话,比如 tmux new -s backup,名字最好用英文和项目名,不要用中文和空格,省得以后接回时敲错。第二步,任务跑起来之后按 Ctrl-b 再按 d,这是 detach,断开查看但不结束会话。第三步,下次登录后用 tmux attach -t backup 接回,用 tmux ls 可以先看当前有哪些会话,避免接错。
一个会话里还可以开多个窗口和分屏,适合同时看日志和敲命令。Ctrl-b c 是新建窗口,Ctrl-b n 和 Ctrl-b p 是前后切换窗口。Ctrl-b % 是左右分屏,Ctrl-b " 是上下分屏,分屏之间用 Ctrl-b 加方向键切换。某个分屏不用了,用 Ctrl-b x 关掉它;整个会话真的不用了,在里面执行 exit,或者用 tmux kill-session -t backup 结束;detach 是暂时离开,kill 是彻底结束。
新手最容易踩的坑有三个。第一,滚动查看历史输出时直接用鼠标滚轮可能没反应,要先按 Ctrl-b [ 进入复制模式,用方向键或 PageUp 翻看,按 q 退出。第二,不要在 tmux 里再套一层 tmux,快捷键会互相抢。第三,tmux 保的是断线不断任务,不是服务器重启不断任务,机器重启后会话一样会丢,真正重要的长任务还是要把输出重定向到日志文件里,tmux 负责不断线,日志负责留证据。
养成一个习惯就够了:一个项目一个会话,名字写清项目,离开用 detach,回来用 attach。这样网络再抖,也只需重新接回会话。
- 点赞
- 收藏
- 关注作者
评论(0)