screen与tmux:SSH断线不中断的后台任务管理

873 字
4 分钟
screen与tmux:SSH断线不中断的后台任务管理

生信分析最怕什么?不是代码报错——是跑了 18 小时的比对,SSH 断了

screen 和 tmux 就是为解决这个问题而生的。它们在你的 SSH 会话之外创建一个独立的后台会话,即使你断网了、关电脑了,程序还在服务器上继续跑。下次登录一条命令就能回到之前的状态。

1. screen 快速上手——三分钟搞定#

安装#

Terminal window
apt install screen -y # Debian/Ubuntu
yum install screen -y # CentOS

核心操作(记住这6条就够了)#

Terminal window
# 1. 创建新会话
screen -S rnaseq # -S 起个名字,别用自动生成的随机ID
# 2. 在screen里跑程序
bwa mem ref.fa sample.fastq.gz > output.sam
# 程序跑起来了...
# 3. 暂时离开(detach):按 Ctrl+A 然后按 D
# 屏幕会显示 [detached from 12345.rnaseq]
# 4. 查看所有会话
screen -ls
# 输出:
# There is a screen on:
# 12345.rnaseq (Detached)
# 5. 重新连接(reattach)
screen -r rnaseq
# 6. 彻底关闭会话
# 在screen里输入 exit 或按 Ctrl+D

常用快捷键(都在 Ctrl+A 之后)#

按键功能
Ctrl+A, D分离(最常用)
Ctrl+A, C创建新窗口
Ctrl+A, N下一个窗口
Ctrl+A, P上一个窗口
Ctrl+A, “窗口列表
Ctrl+A, [进入滚动模式(翻看历史输出)
Ctrl+A, K关闭当前窗口

实际使用场景#

场景1:在服务器上跑一个需要8小时的比对

Terminal window
ssh user@server
screen -S alignment
conda activate bioinfo
bwa mem -t 16 ref.fa sample.fastq.gz > sample.sam
# Ctrl+A, D 分离
# 关电脑回家
# 第二天:
ssh user@server
screen -r alignment
# 比对跑完了,可以看到所有输出

场景2:一个screen里开多个窗口跑不同任务

Terminal window
screen -S project
# 窗口0:跑比对
bwa mem ...
# Ctrl+A, C 创建新窗口
# 窗口1:查看日志
tail -f log.txt
# Ctrl+A, C 再创建
# 窗口2:编辑配置文件
vim config.yaml
# Ctrl+A, N/P 在窗口间切换

2. tmux——screen 的现代替代品#

tmux 功能更强、界面更现代、配置更灵活。如果用习惯了 screen 可以直接迁移到 tmux:

安装#

Terminal window
apt install tmux -y

核心操作#

Terminal window
# 创建会话
tmux new -s rnaseq
# 分离:Ctrl+B, D
# 查看会话
tmux ls
# 重新连接
tmux attach -t rnaseq
# 关闭
tmux kill-session -t rnaseq

tmux 的默认前缀键是 Ctrl+B(screen 是 Ctrl+A)。如果你习惯用 Ctrl+A,可以在 ~/.tmux.conf 里改:

Terminal window
echo "set -g prefix C-a" >> ~/.tmux.conf
echo "unbind C-b" >> ~/.tmux.conf
echo "bind C-a send-prefix" >> ~/.tmux.conf
tmux source-file ~/.tmux.conf

tmux 相对 screen 的优势#

特性screentmux
窗口分割需要打补丁原生支持(Ctrl+B, %水平 / “垂直)
会话共享基础支持完善支持
配置文件.screenrc.tmux.conf
状态栏基础高度可定制

tmux 的窗口分割特别实用: 左边 vim 写代码,右边跑命令,不用切窗口。

Terminal window
# tmux里
Ctrl+B, % # 垂直分割(左右各一个窗格)
Ctrl+B, " # 水平分割(上下各一个窗格)
Ctrl+B, 方向键 # 切换窗格

3. 踩坑#

坑1:screen -r 报 “There is no screen to be resumed” 原因:你上次 detach 之后又在另一个终端 attach 并 close 了。 解决:screen -d -r rnaseq(强制 detach 另一端再 attach)

坑2:screen/tmux 里看不到颜色 在 screen 里:echo "term screen-256color" >> ~/.screenrc 在 tmux 里:echo "set -g default-terminal screen-256color" >> ~/.tmux.conf

坑3:screen 程序跑完了但会话还在 正常现象。可以用 screen -X -S rnaseq quit 强制关闭。

4. 选型建议#

  • 只跑基础后台任务 → screen(老牌稳定,所有服务器都有)
  • 经常需要分屏、共享会话 → tmux(现代体验好)

本文于 2025-04-12 在 Debian 12 上实测。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

screen与tmux:SSH断线不中断的后台任务管理
https://fg.ink/posts/screen-tmux-background-tasks/
作者
风观
发布于
2024-11-01
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
风观
风有来路,观有所思
分类
标签
站点统计
文章
50
分类
1
标签
29
总字数
61,837
运行时长
0
最后活动
0 天前

文章目录