Linux的screen工具库实现多终端

screen简介

Linux screen命令用于多重视窗管理程序。Linux这种命令行模式的没办法直观的实现多终端运行。不像windows一样打开几个dos命令终端就可以同时多操作任务。Linux需要借助screen库。

像Xshell之中基于SSH远程连接的软件,就相当于开启了一个dos终端,但是一旦断开,就关闭了命令窗口,任务也就停止了。利用SSH远程连接服务器,运行程序需要保证在此期间窗口不能关闭并且连接不能断开,否则当前窗口所运行的任务就被杀死。借助screen就可以实现简单的多窗口,来持久化任务。

例如在配置spring boot项目上线时首先需要确定项目是可以正常运行的,在外网也可以访问到。这是如果基于SSH连接的使用java -jar - XXX.jar来运行项目,缺点是该连接不可以断开,但是使用screen技术就可以持久化的运行。

screen安装与使用

  1. 安装
sudo apt install screen 安装screen
  1. 索引
screen -ls

# 该命令也可以查看是否安装成功
  1. 创建新的终端
screen -S dosname
  1. 连接对应名称终端
screen -r name

screen -D -r name # 关闭上一哥终端开启新的终端

总结

  • 新建窗口

1)可直接通过命令screen新建一个窗口,并进入窗口。但通过这种方式新建的窗口没有名字,只有系统分配给它的一个id。当需要恢复窗口时,只能通过id号来恢复。
2)通过命令screen -S name,这样就可以新建一个名字为name的窗口,同样系统也会分配给它一个id,当恢复该窗口时既可以通过id号也可以通过窗口名。

  • 分离会话

退出当前新建的窗口,通过快键键Ctrl+a+d实现分离,此时窗口会跳出[detached]的提示,并回到主窗口。

  • 恢复会话窗口
    首先查看当前有哪些screen窗口,通过命令:screen -ls 将列出窗口列表

Linux的screen工具库实现多终端_第1张图片
可以通过以下命令恢复pyone窗口:screen -r pyonescreen -r 2739013

  • 杀死会话窗口
    通过命令kill -9 threadnum注意此处只能通过id号来杀死窗口。
# 强制关闭
screen -S -X yourname quit

screen -S 会话名称 -X quit

  • 清除死去窗口
    通过命令screen -wipe这个命令将自动清除所有处于dead状态的窗口

  • 退出回话

a.完全退出回话杀死当前screen会话进程
exit
b.保持会话退出,这样退出的话,以后还可以通过screen -r (name)恢复会话,快捷命令
ctrl A D

参数:

-A  将所有的视窗都调整为目前终端机的大小。

-d  将指定的screen作业离线。

-h  指定视窗的缓冲区行数。

-m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。

-r  恢复离线的screen作业。

-R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。

-s  指定建立新视窗时,所要执行的shell。

-S  指定screen作业的名称。

-v  显示版本信息。

-x  恢复之前离线的screen作业。

-ls或–list  显示目前所有的screen作业。

-wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。

Screen命令参数:
-A -[r|R] 将所有的视窗都调整为目前终端机的大小。
-c filename 用指定的filename文件替代screen的配置文件’.screenrc’.
-d [pid.tty.host] 断开screen进程(使用该命令时,screen的状态一定要是Attached,也就是说有用户连在screen里)。一般进程的名字是以pid.tty.host这种形式表示(用screen -list命令可以看出状态)。
-D [pid.tty.host] 与-d命令实现一样的功能,区别就是如果执行成功,会踢掉原来在screen里的用户并让他logout。
-h <行数>   指定视窗的缓冲区行数。
-ls或–list 显示目前所有的screen作业。
-m 即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-p number or name 预先选择一个窗口。
-r [pid.tty.host] 恢复离线的screen进程,如果有多个断开的进程,需要指定[pid.tty.host]
-R 先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s shell 指定建立新视窗时,所要执行的shell。
-S <作业名称> 指定screen作业的名称。(用来替代[pid.tty.host]的命名方式,可以简化操作).
-v 显示版本信息。
-wipe 检查目前所有的screen作业,并删除已经无法使用的screen作业。
-x 恢复之前离线的screen作业。

项目持久化

连接到linux并将spring boot项目上传

在这里插入图片描述

java -jar -XXX.jar启动项目

Linux的screen工具库实现多终端_第2张图片

该项目的接口

@RestController
public class TestController {

    //@ConfigurationProperties读取配置文件转java对象
    @Autowired
    private Method method;

    //@Value直接读取属性
    @Value("${method.header}")
    private String header;

    //Environment对象遍历读取
    @Autowired
    private Environment environment;


    @GetMapping(value = "/title")
    public String method3(){
        String title = method.getTitle();
        return title;
    }

    @GetMapping(value = "/header")
    public String method4(){
        return header;
    }

    @GetMapping(value = "/one")
    public String method5(){
        return environment.getProperty("method.one");
    }


}

浏览器端访问

Linux的screen工具库实现多终端_第3张图片

当断开服务后
Linux的screen工具库实现多终端_第4张图片
浏览器无法访问

Linux的screen工具库实现多终端_第5张图片
那么如何持久化任务呢?这就需要借助screen

在这里插入图片描述

新终端重新运行项目
Linux的screen工具库实现多终端_第6张图片

Ctrl+A+D退出该终端

在这里插入图片描述

退出后如上图所示会提示存在一个pd.name的进程在运行,screen -ls也可以查看

Linux的screen工具库实现多终端_第7张图片
这是浏览器访问任何成功访问即实现了简单的持久化

Linux的screen工具库实现多终端_第8张图片
可以通过screen -S -X yourname quit来强制停掉。

你可能感兴趣的:(Linux,linux,java,运维)