SSH远程登录Linux之后执行任务时,遇到断网、断电或者电脑被人砸了导致客户端与远程服务器失联,会导致正在执行的任务挂掉。一般来说,耗时比较久的任务我们会用nohup sh xxx.sh &执行,但是,nohup无法让你介入操作,即使是kill都比较麻烦,得去找进程的pid。
screen的好处就是,可以让你像nohup那样“保存”正在执行的任务,也可以轻而易举地恢复到正在执行任务的“screen”当中。而无论客户端发生什么天灾人祸,服务器那边都能如期执行。Screen被称之为一个全屏窗口管理器,用他可以轻松在一个物理终端上获得多个虚拟终端的效果。并且,在这些虚拟终端中,它可以创建多个窗口。
例如登录之后:
screen # 创建一个虚拟终端,生成默认的[pid.tty.host]名称
ctrl+a d # 断开刚创建的终端,回到创建前环境
screen -S Develop # 创建另一个终端,命名为Develop
screen -S 测试 # 在Develop的screen环境中,再创建一个终端,命名为测试
crtl+a d # 断开刚创建的“测试”终端
screen -ls # 查看已存在的虚拟终端,会告诉你每个终端的sessionid,如下:
#There are screens on:
# 24027.pts-2.xxx-host (Detached)
# 24489.Develop (Detached)
# 25062.测试 (Attached)
#3 Sockets in /var/run/screen/S-work.
screen -r 24489 # 回到Develop终端中
exit # 终止并退出Develop终端
上面讲的是screen创建终端,在终端中,还有一个窗口的概念。终端好比是浏览器,窗口就是浏览器中的tab页。
screen -r 24027 # 回到之前创建的终端中,一定要在screen终端中才可以创建窗口
ctrl+a c # 创建窗口,然后随便在这个窗口中敲几个字符,方便辨认
ctrl+a c # 再创建一个
ctrl+a p # 切换到上一个窗口,也就是刚才敲了字符的那个
ctrl+a n # 切换到下一个窗口
ctrl+a w # 显示窗口列表
ctrl+a 0-9 # 切换制定的窗口
ctrl+a K # 关闭当前窗口,并切换到下一窗口(当退出最后一个窗口时,该终端自动终止,并退回到原始shell状态)
exit # 退出当前窗口,并切换到下一窗口(当退出最后一个窗口时,该终端自动终止,并退回到原始shell状态)