Linux screen命令用于多重视窗管理程序。Linux这种命令行模式的没办法直观的实现多终端运行。不像windows一样打开几个dos命令终端就可以同时多操作任务。Linux需要借助screen库。
像Xshell之中基于SSH远程连接的软件,就相当于开启了一个dos终端,但是一旦断开,就关闭了命令窗口,任务也就停止了。利用SSH远程连接服务器,运行程序需要保证在此期间窗口不能关闭并且连接不能断开,否则当前窗口所运行的任务就被杀死。借助screen就可以实现简单的多窗口,来持久化任务。
例如在配置spring boot项目上线时首先需要确定项目是可以正常运行的,在外网也可以访问到。这是如果基于SSH连接的使用java -jar - XXX.jar
来运行项目,缺点是该连接不可以断开,但是使用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 -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 将指定的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
启动项目
该项目的接口
@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
来强制停掉。