screen简介
Linux screen 命令与多个窗口管理器一起使用。 Linux的命令行方式无法直观地实现多终端操作。与Windows不同,您可以打开多个DOS命令终端来同时执行多个任务。 Linux 需要屏幕库。
Xshell中基于SSH远程连接的软件相当于打开了一个dos终端,但一旦断开连接,命令窗口就会关闭,任务也会停止。使用SSH远程连接服务器时,运行的程序需要保证在此期间窗口不能关闭,连接不能断开,否则当前窗口中运行的任务会被杀死。借助screen,可以实现简单的多窗口持久化任务。
例如在配置spring boot项目上线时首先需要确定项目是可以正常运行的,在外网也可以访问到。这是如果基于SSH连接的使用java -jar - XXX.jar
来运行项目,缺点是该连接不可以断开,但是使用screen技术就可以持久化的运行。
screen安装与使用
- 安装
sudo apt install screen 安装screen
- 指数
screen -ls
# 该命令也可以查看是否安装成功
- 创建新终端
screen -S dosname
- 连接到对应名称的终端
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
将列出窗口列表
可以通过以下命令恢复pyone窗口:screen -r pyone
或 screen -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 - 使指定的屏幕作业脱机。
-h 指定窗口中的缓冲区行数。
-m 强制创建新的屏幕作业,即使该屏幕作业当前正在运行。
-r 恢复脱机屏幕作业。
-R 首先尝试恢复离线作业。如果未找到离线作业,则会创建新的屏幕作业。
-s 指定创建新窗口时要执行的 shell。
-S 指定屏幕作业的名称。
-v 显示版本信息。
-x 恢复先前离线的屏幕作业。
-ls 或 –list 显示所有当前屏幕作业。
-wipe 检查所有当前屏幕作业并删除不再可用的屏幕作业。
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
启动项目
项目的界面
@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");
}
}
浏览器访问
当断开服务后
浏览器无法访问
那么如何持久化任务呢?这就需要借助screen
了
新终端重新运行项目
Ctrl+A+D
退出该终端
退出后如上图所示会提示存在一个pd.name的进程在运行,screen -ls
也可以查看
这是浏览器访问任何成功访问即实现了简单的持久化
可以通过screen -S -X yourname quit
来强制停掉。