上一篇文章我们聊了如何让 ssh 保持长连接,这样就不会轻易断开影响我们的使用。

今天的要说的是另外一种比较棘手的情况,假如我正在服务器上跑某个程序时,本地的网络突然断掉了,此时远程会话会被关闭,程序自然也就停止了运行。

对于做深度学习的人来说,跑一个模型经常要花费几个小时甚至几天的时间。在这么长的时间里,偶尔的网络中断时是很有可能的。 而且,手残的我也会误操作关掉正在跑程序的终端🤦‍。

所以我迫切希望能有一个类似于后台会话的东西,网络中断或者终端关闭都不会产生影响到它。

GNU Screen 就是这样一个软件,可以很好的帮助我们在服务器上进行开发和测试。

安装

Screen 是很容易安装的,比如我们在 Ubuntu 服务器上可以直接执行下面的命令进行安装:

sudo apt install screen

安装完成后怎么判断是否安装成功呢?通常情况下是打印一下版本号看看有没有问题。

screen -v
# output: Screen version 4.00.03 (FAU) 23-Oct-06

如果成功输出版本号,那么安装完成了。

使用

你可以直接在 shell 中输入 screen 创建一个匿名后台会话,但通常情况下不建议你这样做,因为当你有多个匿名后台会话时会很难区分。

下面我们来创建一个名字 test 的后台会话,当然你可以用任何其他名字。

screen -S test

现在你已经进入了 test 这个后台会话中,你可以在这里开始你的工作,现在即使网络中断,也不会影响到这个后台会话的内容。

假如现在网络真的断了,你重新远程登录服务器后,只需要执行下面命令,就可以重新回到 test 后台会话中。

screen -r test

当然你也可以主动暂离后台会话,这是需要你先按住 CTRL 再点按 A 和 D 就可以回到远程登录的 shell 中。

如果你想完全退出并关闭这个后台会话,可以在 shell 中直接输入 exit 即可退出。

另外如果你不记得自己先前会话的叫什么了,或者是想查看一下现在有多少后台会话在运行,可以用下面这个命令:

 screen -ls

上面就是 Screen 的一些基础用法,你可以在帮助中找到更多用法。

 screen -h

特殊情况

  1. 因为某种情况没有分离先前会话,导致现在无法进入。
# 强制分离
screen -d
# 进入会话
screen -r test

参考