如何不中断连接保持linux服务器持续运行 —— screen 使用介绍
请参考 ck's blog 以获取最佳观感
在 linux 服务器上跑模型的时候,有时会在终端会话中持续了一段时间后超时断开,或者因为意外情况断网,如果正常在命令行终端执行程序时,此时会中断程序的进行,这很恼火,这就意味着要让程序持续运行,就必须得保持主机和服务器的连接,程序跑一晚上,主机就得开一晚上,那我还要服务器干什么,为了解决这个问题, screen 是个及其有用的方法。
功能介绍
screen
是一个非常强大的终端复用器,它在Linux和类Unix系统中有着广泛的用途。以下是screen
的一些主要用途:
-
保持会话在断开连接后继续运行: 当你通过SSH等远程连接工具连接到服务器时,如果网络连接意外断开,你的工作可能会丢失。使用
screen
,即使远程连接断开,你的会话也会被保留,并且可以在重新连接后恢复。 -
多任务处理:
screen
允许你在一个终端窗口中创建多个会话(称为“窗口”),并在它们之间轻松切换。这对于同时运行多个进程或命令行任务非常有用。 -
协作工作:
screen
支持多个用户同时连接到同一个会话,这意味着你可以与团队成员协作工作,即使你们身处不同的地方。 -
脚本和自动化:
screen
可以与脚本结合使用,以自动化复杂的任务或流程。例如,你可以编写一个脚本来启动screen
会话,运行特定的命令,然后在完成后自动关闭会话。
总之,screen
是一个非常灵活且功能强大的工具,它能够提高你在Linux环境下的工作效率,特别是在远程工作和多任务处理方面。
下载与安装步骤
下载 screen 组件
# CentOS
yum install screen
# Debian/Ubuntu
apt install screen
如果此时发生报错:
![]()
image-20240315162038927 说明你没有 root 权限,你可以通过 sudo -s 获取 root 权限后再执行这个操作,如果你和我一样,作为服务器的使用者而不是拥有者,本身就没有 root 权限,可以通过下面的步骤安装 :
(1)下载安装包到本地
apt-get download your-package-name
(2)安装到本地
dpkg -x your-package.deb your-dir
(3)将 screen 命令 添加到全局环境中
找到你本地用户的 ~/.bashrc 文件
vim ~/.bashrc # 输入i进入编辑模式
# 在.bashrc文件最后面,添加该路径,按esc 输入:wq 保存并退出
export PATH=$PATH:/your_dir/usr/bin/
source ~/.bashrc # 路径生效
在终端输入命令 screen -V
,显示如下界面,即为安装成功。
![image-20240315160708591](https://i-blog.csdnimg.cn/blog_migrate/44ecedc37cebc116f1fb44e7021ca16d.png)
screen 的使用
在终端窗口,输入命令 screen
,即可启动 screen ,创造一个对话。但如果你没有 root 权限,则会发生下面的报错:
![image-20240315162932372](https://i-blog.csdnimg.cn/blog_migrate/56977127359f4acda0d964d9c3b0f89f.png)
发生这个报错的原因是因为 screen 在运行过程中,需要在根目录下建立文件夹,而这个过程需要 root 权限,所以,我们选择改变 screen 运行过程中建立文件夹的路径即可 :
(1) 建立 .screen 文件夹,并给予权限
mkdir ~/.screen && chmod 700 ~/.screen
(2) 将该路径添加到全局变量
export SCREENDIR=$HOME/.screen
(3) 运行生效
source ~/.bashrc
具体使用方法介绍
以下是一些基本的screen
使用方法,部分参考
:
-
启动新的
screen
会话: 你可以通过以下命令启动一个新的screen
会话:screen -S session_name
其中
session_name
是你给这个screen
会话起的名字。如果你只输入了
screen
也可以启动一个会话,会自动命名,这里这个session_name 用处并不大,你既可以通过这个名字来访问会话,也可以通过 ID 来访问会话,而 ID 可以通过下条命令获取。 -
列出所有
screen
会话: 要查看当前运行的所有screen
会话,可以使用:screen -ls
image-20240315171453835 如上图所示,这一命令显示了当前所有对话的 ID 、name 和状态,其中状态包括:
-
Attached:表示当前screen正在作为主终端使用,为活跃状态。
-
Detached:表示当前screen正在后台使用,为非激发状态。
-
-
暂时分离当前
screen
会话: 在screen
会话中,按下Ctrl
+A
然后按D
可以分离当前会话,即使你断开连接,会话也会继续运行。分离当前会话后,screen -ls
状态显示 Detached ,但这并不影响该会话执行的程序:
![image-20240315171727243](https://i-blog.csdnimg.cn/blog_migrate/f2a504f532af5fce97a3e2282b5753e8.png)
-
重新连接到
screen
会话 and 连接其他会话: 如果你之前启动了一个screen
会话,并且它还在运行,你可以使用以下命令重新连接到这个会话(注意,这是针对 Detached 状态的会话):screen -r session_name
对于仍处于 Attached 状态的会话,可以直接采用如下命令连接:
screen session_name
如果你不确定会话的名称,可以使用会话ID代替,
screen -ls
命令会列出所有的会话ID。 -
退出
screen
会话: 要退出当前的screen
会话,你可以在会话中输入:exit
或者使用快捷键:
Ctrl + D
也可以在主终端内:
screen -S [pid/Name] -X quit
注意: 退出当前会话后,会话执行的程序会被中断,在执行
screen -ls
也无法找到该会话。image-20240315172034224 -
创建新的窗口: 在Screen环境下,一个对话可以创建多个窗口。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。在
screen
会话中,你可以创建多个窗口,使用以下命令:Ctrl + A Ctrl + C
这将创建一个新的窗口,并且你可以在不同的窗口之间切换。
-
在窗口之间切换: 要切换到其他窗口,可以使用:
Ctrl + A 数字键 0 - 9
或者使用:
Ctrl + A ctrl + A
-
关闭当前窗口: 要关闭当前窗口,可以使用:
Ctrl + A K
这些是screen
的一些基本用法。screen
还有很多高级功能,比如复制粘贴文本、分屏显示等,可以通过查看screen
的手册页(man screen
)来获取更多信息。
参考博文
[1] https://www.cnblogs.com/yanqiang/p/13476546.html
[2] https://blog.csdn.net/csy294745333/article/details/104960857
[3] https://zhuanlan.zhihu.com/p/405968623
[4] https://blog.csdn.net/thumbcs/article/details/81072961
本文由 mdnice 多平台发布