SSH断开后保留任务:tmux使用教程

下载、编译或查看长时间任务时,SSH窗口断开可能使任务收到挂断信号。tmux把终端会话留在服务器内,你可以先分离,稍后用同一系统账号重新连接。它不会让任务跨服务器重启自动恢复,也不代替systemd这样的服务管理器。

安装并创建命名会话

command -v tmux
tmux -V
tmux new -s work

找不到tmux时,Debian/Ubuntu可先按APT教程安装 tmux 包。new后的work是自选会话名,建议按用途命名,不使用包含密码的名字。进入后底部通常出现状态栏;执行 pwd、whoami,确认仍在正确服务器和账号下。

先用无害命令练习分离

while :; do date -Is; sleep 10; done

终端开始每10秒输出一次时间。按Ctrl+B后松开,再按D,这是一组先后按键,不是同时按三个键。看到分离提示后,你已回到外层SSH终端,tmux中的练习仍继续。不要用Ctrl+D代替分离:它可能退出当前Shell。

重新连接同一个会话

tmux ls
tmux attach -t work

列表应包含work;attach回去后应看到持续新增的时间。确认后按Ctrl+C结束练习循环,再继续真实任务。SSH网络断开时,恢复网络后重新登录同一实例、同一系统账号,再执行上述查询与连接;换了用户或服务器就不会看到原会话。

会话冲突和正常退出

情况 操作
duplicate session 先tmux ls确认是否已有同名任务,连接现有会话或换一个新名字
session already attached 先确认是否另有人正在同一会话操作;需要协作时明确共享权限,不随意踢掉别人的连接
no server running / 会话不在列表 检查账号和实例是否一致,以及任务是否结束或服务器是否重启
任务完成准备结束 先确认任务已退出,在对应会话内输入exit,随后tmux ls确认会话消失

不要为清理列表直接运行kill-server,这会结束该tmux服务器中的其他会话。只有确认某个会话中的任务可以停止,才针对该会话结束;长期服务应按systemd或应用官方的守护方式部署。

长任务还需要自己的结果记录

tmux保存终端会话不等于保存可长期检索的业务日志。正式下载、导入或脚本应按软件支持的方法记录输出、退出状态和恢复位置,并防止重复启动。需要密码时在可信终端按提示输入,不把密码放进命令行或会话名;服务器关机或重装后不能依靠tmux恢复未落盘的数据。