首页 > 技术文章 > 利用screen命令实现SSH后台不断开

c-chenbin 2021-07-22 00:20 原文

利用screen命令实现SSH后台不断开

1.背景

有时我们登录了远程的服务器,需要执行一些命令,一些执行时间短的命令我们可以慢慢等待其结束,但是有一些任务的执行时间会很长,比如一些文件的下载,文件的备份等等,这几天在训练深度学习的模型,模型的训练就属于那种执行时间很长的任务,短则数小时,长则几天,如果我们要等其结束,那这台电脑就需要一直开机,更别提有的ssh客户端会在长时间没有动作的情况下关闭掉该连接,导致我们的努力前功尽弃,这想想都不合理。

在一番寻找后,我选择了linux下的screen命令,实现了关闭ssh连接后,该任务任然在后台继续运行,下次连接也可以继续,而且任务执行过程中打印在终端上的日志也会得以保留。

2.简介

GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。

GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。

简单来说,screen使用上就会给我们感觉在终端里新建了一个窗口,我们可以在窗口里执行一些命令,下次连接的时候可以再次打开这个窗口来恢复

3.使用

大部分的Linux发行版已经预装了screen命令,我们可以通过screen -v来检查是否安装了screen并查看版本信息

接下来我们就将创建一个screen窗口,我们使用screen -S name这个命令来创建一个窗口,其中name是这个窗口的名字,可以根据实际执行的任务来进行修改,方便我们的记忆。

输入完screen -S name命令后,终端会被清空,代表你新建了一个新的窗口,这时,你就可以在这个新建的窗口执行你想执行的任务。

你如果想从该窗口中退出,你可以使用ctrl+A+D来从当前的窗口中退出,但是你的任务还是在后台执行

类似于Windows系统的最小化窗口

上图表示我们已经从刚刚的窗口中退出,我们可以随时在打开进入这个窗口

若想要在进入这个窗口,需要使用screen -r来重新连接,此时若你已经新建了多个窗口,系统会列出所有你新建的窗口,我们需要指明我们想要连接的窗口。

例如列出了以下的窗口

7880.session    (Detached)
7934.session2   (Detached)
7907.session1   (Detached)

前面的数字代表该窗口的pid,后面表示窗口的名称,也就是我们给窗口起的名字,这里我们若想恢复第一个窗口,可以使用screen -r 7880,也可以使用screen -r -S session,这两种一个使用pid,一个使用名称。

在使用完这个窗口后,我们有时就会想要删除这个窗口,这时我们可以使用screen -S pid -X quit来删除这个窗口,pid即为上面所说的一串数字。

想要查看更加详细的screen用法,可以查看screen的手册~

推荐阅读