通过SSH连接Linux服务器后,执行文件下载、数据处理或较长时间的维护任务,是很常见的操作。
但如果电脑休眠、网络中断,或者关闭了SSH窗口,直接运行在终端中的程序可能随会话结束而退出,具体表现与程序及系统配置有关。
使用tmux,可以先创建一个保留在服务器上的终端会话,在里面运行任务。暂时离开时分离会话,之后重新连接服务器,再接回原来的操作界面。
本文以Debian、Ubuntu为例,介绍从安装到重新接入的完整流程,适用于莱卡云Linux云服务器及常见Linux服务器环境。
1. tmux适合解决什么问题?
tmux是一款终端复用工具。对于刚开始使用的用户,可以先掌握两个功能:
- 分离会话: 暂时离开操作界面,让会话中的程序继续运行。
- 重新接入: 再次登录服务器后,回到原来的终端界面。
它比较适合以下场景:
- 执行需要较长时间的下载或文件处理。
- 运行临时维护脚本。
- 需要稍后回来查看结果的命令行操作。
- 在不同SSH连接之间继续同一项工作。
使用时要注意顺序:先进入tmux,再启动任务。
tmux会话能够在客户端断开后继续存在,但服务器重启、程序自身退出或系统清理进程,仍然可能终止任务。
2. 在服务器上安装tmux
先通过SSH登录服务器。
下文的安装、创建会话和恢复会话命令,都在登录后的服务器终端中执行。创建和恢复会话时,应使用同一个系统用户。
Debian、Ubuntu可以执行:
sudo apt-get update
sudo apt-get install -y tmux
如果使用root登录,可以去掉命令开头的sudo。通过系统软件包管理器安装,也是tmux官方提供的安装方式之一。
安装后检查:
tmux -V
能够显示版本号,说明已经可以调用tmux。
普通使用不需要额外开放公网端口,继续通过原来的SSH连接操作即可。
3. 创建会话,运行一个简单测试
创建名为work的会话:
tmux new -s work
其中,work是会话名称,可以换成容易识别的名字,例如backup或download。
进入后,终端底部通常会出现tmux状态栏。
为了先验证操作流程,可以运行下面的测试命令:
while true; do
date '+%F %T'
sleep 5
done
这条命令每隔约5秒输出一次服务器时间,不会修改业务文件。
看到时间持续输出后,先不要按Ctrl+C,继续进行下一节的分离测试。
4. 分离会话,重新登录后接回
第一步:分离当前会话
按下面的顺序操作:
- 同时按下
Ctrl+B。 - 松开两个按键。
- 再按小写
d,不用按Shift。
这里不是同时按三个键。
使用默认配置时,终端通常会显示:
[detached (from session work)]
随后返回外层SSH终端。此时只是离开tmux界面,里面的测试循环仍可继续运行。
第二步:断开并重新连接SSH
确认已经回到外层SSH提示符后,执行:
exit
这一步用于退出当前SSH连接。
等待约20秒,再通过原来的SSH客户端,使用同一个用户登录同一台服务器。
第三步:查看并接入会话
先查看会话列表:
tmux ls
如果列表中仍有work,执行:
tmux attach -t work
这会接入已有会话,而不是重新运行一份任务。
正常情况下,你会回到刚才的测试界面,并看到分离期间产生的时间记录。
确认后按Ctrl+C停止测试循环,保留当前tmux会话供后续使用。

5. 在tmux中运行实际任务
完成测试后,就可以在当前tmux会话里执行自己的任务。
假设脚本位于/opt/myjob/run.sh,可以执行:
cd /opt/myjob && /bin/bash ./run.sh
这里的目录和脚本名是示例,需要替换为实际路径。
先进入项目目录,可以让脚本中的相对路径按预期工作;使用&&连接两条命令,则表示只有成功进入目录后才运行脚本。
任务开始后,仍然使用:
Ctrl+B → 松开 → 小写d
分离会话,之后再通过tmux attach -t work接回。
需要保留日志时怎么做?
需要保存输出时,用下面这条命令替代上面的启动命令:
cd /opt/myjob && /bin/bash ./run.sh >> run.log 2>&1
它会把正常输出和错误输出追加到项目目录中的run.log。执行用户需要有相应的写入权限。
这时终端可能没有持续显示内容,因为输出已经写入日志。
可以另开一个SSH连接查看:
tail -n 50 /opt/myjob/run.log
对于需要保留运行记录的任务,建议使用日志文件。tmux的屏幕历史记录有容量限制,不能代替完整的业务日志。
6. 任务完成后,怎样结束会话?
分离会话和结束会话是两种不同操作。
| 操作 | 作用 |
|---|---|
Ctrl+B,松开后按小写d | 离开界面,保留会话 |
tmux attach -t work | 接回名为work的会话 |
Ctrl+C | 中断当前前台程序,本文用它停止测试循环 |
在会话的Shell提示符下输入exit | 退出当前Shell |
实际业务任务应按照程序自身支持的方式正常结束。确认任务已经完成、终端回到命令提示符后,可以执行:
exit
对于本文创建的单窗口、单窗格会话,退出其中的Shell后,会话通常也随之结束。
如果以后创建了多个窗口或窗格,退出其中一个,不代表整个会话都已经关闭。
任务完成时,还应核对实际结果,例如文件是否生成、数据是否处理完成,以及日志中是否存在错误。
7. 常见问题怎么处理?
提示duplicate session怎么办?
如果创建会话时出现:
duplicate session: work
说明同名会话已经存在。
先执行tmux ls查看,再使用tmux attach -t work接入。确实需要另一项独立任务时,可以使用新的会话名称。
重新登录后,找不到原来的会话怎么办?
先检查:
- 是否登录了同一台服务器。
- 是否使用了创建会话时的同一个用户。
- 是否曾经通过
sudo tmux创建会话,后来却以普通用户查找。 - 服务器是否重启过,或者会话已经被结束。
tmux默认按用户使用独立的套接字目录,因此切换用户后,不能直接假定会看到原来的会话。
如果每次退出SSH后会话都会消失,还需要检查系统的登出清理策略。例如,systemd的KillUserProcesses=yes可能结束登录会话范围内的进程,从而影响tmux。
这种情况应结合服务器实际配置处理,不能仅凭安装了tmux就认为任务一定能够保留。
已经在普通终端运行的任务,会自动进入tmux吗?
不会。
新建tmux会话,不会自动接管其他终端里已经运行的程序。
可以等待原任务完成,或者在确认能够安全停止后,再从tmux中重新启动。涉及数据导入、迁移等操作时,应先确认任务状态,避免重复执行。
8. 结语
使用tmux保持远程任务,核心流程是:
创建会话 → 在会话中启动任务 → 分离会话 → 重新登录 → 接入原会话。
对于临时维护、文件处理和需要随时回来查看的命令行任务,这种方式比较方便。执行过程中保留日志,结束后核对业务结果,能让远程维护更容易追踪。
如果程序需要长期运行,并要求开机启动或失败后自动重启,应使用适合的服务管理方式,可以参考本站的Linux 程序手动运行正常,systemd 启动失败怎么办?
如果任务需要每天或每隔一段时间自动执行,可以继续阅读Linux定时任务不执行怎么办?Cron常见问题排查
在莱卡云Linux云服务器上,根据任务类型选择tmux、systemd或Cron,并做好运行记录,可以让日常运维更有条理。
查看官网购买链接: https://www.lcayun.com
9折优惠码:bloglcayun








