如何不中断连接保持linux服务器持续运行 —— screen 使用介绍

如何不中断连接保持linux服务器持续运行 ------ screen 使用介绍

[TOC]

请参考 ck's blog 以获取最佳观感

在 linux 服务器上跑模型的时候,有时会在终端会话中持续了一段时间后超时断开,或者因为意外情况断网,如果正常在命令行终端执行程序时,此时会中断程序的进行,这很恼火,这就意味着要让程序持续运行,就必须得保持主机和服务器的连接,程序跑一晚上,主机就得开一晚上,那我还要服务器干什么,为了解决这个问题, screen 是个及其有用的方法。

功能介绍

screen是一个非常强大的终端复用器,它在Linux和类Unix系统中有着广泛的用途。以下是screen的一些主要用途:

  1. 保持会话在断开连接后继续运行 : 当你通过SSH等远程连接工具连接到服务器时,如果网络连接意外断开,你的工作可能会丢失。使用screen,即使远程连接断开,你的会话也会被保留,并且可以在重新连接后恢复。

  2. 多任务处理 : screen允许你在一个终端窗口中创建多个会话(称为"窗口"),并在它们之间轻松切换。这对于同时运行多个进程或命令行任务非常有用。

  3. 协作工作 : screen支持多个用户同时连接到同一个会话,这意味着你可以与团队成员协作工作,即使你们身处不同的地方。

  4. 脚本和自动化 : screen可以与脚本结合使用,以自动化复杂的任务或流程。例如,你可以编写一个脚本来启动screen会话,运行特定的命令,然后在完成后自动关闭会话。

总之,screen是一个非常灵活且功能强大的工具,它能够提高你在Linux环境下的工作效率,特别是在远程工作和多任务处理方面。

下载与安装步骤

下载 screen 组件

shell 复制代码
# CentOS
yum install screen
# Debian/Ubuntu
apt install screen

如果此时发生报错:

说明你没有 root 权限,你可以通过 sudo -s 获取 root 权限后再执行这个操作,如果你和我一样,作为服务器的使用者而不是拥有者,本身就没有 root 权限,可以通过下面的步骤安装 <math xmlns="http://www.w3.org/1998/Math/MathML"> [ 1 ] ^{[1]} </math>[1]:

(1)下载安装包到本地

bash 复制代码
apt-get download your-package-name

(2)安装到本地

bash 复制代码
dpkg -x your-package.deb your-dir

(3)将 screen 命令 添加到全局环境中

找到你本地用户的 ~/.bashrc 文件

bash 复制代码
vim ~/.bashrc # 输入i进入编辑模式
# 在.bashrc文件最后面,添加该路径,按esc 输入:wq 保存并退出
export PATH=$PATH:/your_dir/usr/bin/ 
source ~/.bashrc # 路径生效

在终端输入命令 screen -V ,显示如下界面,即为安装成功。

screen 的使用

在终端窗口,输入命令 screen ,即可启动 screen ,创造一个对话。但如果你没有 root 权限,则会发生下面的报错:

发生这个报错的原因是因为 screen 在运行过程中,需要在根目录下建立文件夹,而这个过程需要 root 权限,所以,我们选择改变 screen 运行过程中建立文件夹的路径即可 <math xmlns="http://www.w3.org/1998/Math/MathML"> [ 2 ] ^{[2]} </math>[2]:

(1) 建立 .screen 文件夹,并给予权限

bash 复制代码
mkdir ~/.screen && chmod 700 ~/.screen

(2) 将该路径添加到全局变量

bash 复制代码
export SCREENDIR=$HOME/.screen

(3) 运行生效

bash 复制代码
source ~/.bashrc

具体使用方法介绍

以下是一些基本的screen使用方法,部分参考 <math xmlns="http://www.w3.org/1998/Math/MathML"> [ 3 − 4 ] ^{[3-4]} </math>[3−4]:

  1. 启动新的screen会话 : 你可以通过以下命令启动一个新的screen会话:

    bash 复制代码
    screen -S session_name

    其中session_name是你给这个screen会话起的名字。

    如果你只输入了 screen 也可以启动一个会话,会自动命名,这里这个session_name 用处并不大,你既可以通过这个名字来访问会话,也可以通过 ID 来访问会话,而 ID 可以通过下条命令获取。

  2. 列出所有screen会话 : 要查看当前运行的所有screen会话,可以使用:

    bash 复制代码
    screen -ls

    如上图所示,这一命令显示了当前所有对话的 ID 、name 和状态,其中状态包括:

    • Attached:表示当前screen正在作为主终端使用,为活跃状态。

    • Detached:表示当前screen正在后台使用,为非激发状态。

  3. 暂时分离当前screen会话 : 在screen会话中,按下Ctrl + A然后按D可以分离当前会话,即使你断开连接,会话也会继续运行。分离当前会话后, screen -ls 状态显示 Detached ,但这并不影响该会话执行的程序:

  1. 重新连接到screen会话 and 连接其他会话 : 如果你之前启动了一个screen会话,并且它还在运行,你可以使用以下命令重新连接到这个会话(注意,这是针对 Detached 状态的会话):

    bash 复制代码
    screen -r session_name

    对于仍处于 Attached 状态的会话,可以直接采用如下命令连接:

    bash 复制代码
    screen session_name

    如果你不确定会话的名称,可以使用会话ID代替,screen -ls命令会列出所有的会话ID。

  2. 退出screen会话 : 要退出当前的screen会话,你可以在会话中输入:

    bash 复制代码
    exit

    或者使用快捷键:

    bash 复制代码
    Ctrl + D

    也可以在主终端内:

    bash 复制代码
    screen -S [pid/Name] -X quit

    注意: 退出当前会话后,会话执行的程序会被中断,在执行 screen -ls 也无法找到该会话。

  3. 创建新的窗口 : 在Screen环境下,一个对话可以创建多个窗口。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。在screen会话中,你可以创建多个窗口,使用以下命令:

    bash 复制代码
    Ctrl + A Ctrl + C

    这将创建一个新的窗口,并且你可以在不同的窗口之间切换。

  4. 在窗口之间切换: 要切换到其他窗口,可以使用:

    bash 复制代码
    Ctrl + A  数字键 0 - 9

    或者使用:

    bash 复制代码
    Ctrl + A  ctrl + A
  5. 关闭当前窗口: 要关闭当前窗口,可以使用:

    bash 复制代码
    Ctrl + A  K

这些是screen的一些基本用法。screen还有很多高级功能,比如复制粘贴文本、分屏显示等,可以通过查看screen的手册页(man screen)来获取更多信息。

参考博文

[1] www.cnblogs.com/yanqiang/p/...

[2] blog.csdn.net/csy29474533...

[3] zhuanlan.zhihu.com/p/405968623

[4] blog.csdn.net/thumbcs/art...

本文由mdnice多平台发布

相关推荐
我是陈泽18 小时前
一行 Python 代码能实现什么丧心病狂的功能?圣诞树源代码
开发语言·python·程序员·编程·python教程·python学习·python教学
肖哥弹架构2 天前
Spring 全家桶使用教程
java·后端·程序员
IT杨秀才5 天前
自己动手写了一个协程池
后端·程序员·go
程序员麻辣烫7 天前
像AI一样思考
程序员
一颗苹果OMG8 天前
关于进游戏公司实习的第一周
前端·程序员
万少8 天前
你会了吗 HarmonyOS Next 项目级别的注释规范
前端·程序员·harmonyos
楽码9 天前
彻底理解时间?在编程中使用原子钟
后端·算法·程序员
江南一点雨9 天前
又一家培训机构即将倒闭!打工人讨薪无果,想报名的小伙伴擦亮眼睛~
java·程序员
用户861782773651810 天前
ELK 搭建 & 日志集成
java·后端·程序员
河北小田10 天前
局部变量成员变量、引用类型、this、static
java·后端·程序员