在做生物信息分析的时候,我们经常是通过自己的客户端,远程登录服务器进行工作。如果本地端掉线,那么一些任务就变成挂起状态,没了结果,还得重新操作。尽管我们前面介绍过如何通过设置xshell让服务器不掉线,但是没办法解决突然断网或者客户端计算机休眠。即使我们前面介绍过使用nohup让任务保持非挂起状态运行,以及忘记nohup之后使用disown将任务切换为nohup状态,但如果每条命令都使用nohup实在是比较麻烦。那么如何才能让任务永不掉线呢?Linux系统为我们提供了强大的screen与tmux命令。
应用场景
-
网络不稳定,经常掉线,导致任务经常中断;
-
使用网络下载数据,例如wget或者prefetch后台下载比较大的数据;
-
下班后,退出ssh登录,关机走人,任务忘了切换到nohup模式;
screen
Screen是一个可以在多个进程之间多路复用一个物理终端的全屏窗口管理器。Screen中有会话的概念,用户可以在一个会话中创建多个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。也就是我们登录Linux shell之后,运行screen命令,打开一个新窗口,接下来的任务在screen中运行,这样即使掉线了,任务也还在。
1 软件安装
# centos
yum install -y screen
# ubuntu
apt install -y screen
2 选项参数
-A :将所有的视窗都调整为目前终端机的大小。
-d :将指定的screen作业离线。
-h :指定视窗的缓冲区行数。
-m :即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-r:恢复离线的screen作业。
-R :先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s: 指定建立新视窗时,所要执行的shell。
-S:指定screen作业的名称。
-v :显示版本信息。
-x:恢复之前离线的screen作业。
-ls:显示目前所有的screen作业。
-wipe :检查目前所有的screen作业,并删除已经无法使用的screen作业。
3 快捷键
使用screen需要经常使用快捷键,其中最常用的就是ctrl+a,后面我们会介绍tumx,使用的是ctrl+b快捷键。下面列出一些最常用的快捷操作:
ctrl + a,d #暂离当前会话
ctrl + a,c #在当前screen会话中创建一个子会话
ctrl + a,w #子会话列表
ctrl + a,p #上一个子会话
ctrl + a,n #下一个子会话
ctrl + a,0-9 #在第0窗口至第9子会话间切换
screen的使用
接下来我们演示一条,使用screen下载生物数据的案例
#1 新建会话,命名为wget
screen -S wget
# 2 运行命令
wget -c ftp://ftp.ncbi.nlm.nih.gov/blast/db/FASTA/swissprot.gz
# 3 按ctrl+a,然后字母d,退出会话,任务仍在运行
$ screen -S wget
[detached from 283349.wget]
# 4 screen -ls查看任务
$ screen -ls
There is a screen on:
283349.wget (Detached)
1 Socket in /var/run/screen/S-wangtong.
#5 重新进入wget终端,任务正在运行
$ screen -r wget
# 6 关闭会话任务,如果在会话中使用exit,就会在退出会话,也关闭了该会话,或者按ctrl+a,k
# tmux ls查看会话
$ screen -r wget
[screen is terminating]