screen详解
处理如何登陆处于attach状态的screen
当你挂起screen,下次想连上screen的时候,有时候会出现screen session的状态为Attached而怎么连也连不上的情况。下面给出解决方法。
列出状态为Attached的session id。
- screen -ls
- screen -D -r <session-id>
Cannot open your terminal
禁止将screen加入到visudo中;
默认在lzadmin账户下执行screen命令会报错:
Cannot open your terminal '/dev/pts/0' - please check.
请先执行下命令:
script /dev/null
将screen终端生成放入垃圾桶,再执行"screen"命令即可;
然后在screen终端下,允许其他命令(仍为非root权限);
龙之力量研发GM 114.112.69.119 tomcat管理,使用screen 打开终端:
script /dev/null
screen -r tomcat
产生新的screen,
sudo /usr/local/tomcat/bin/catalina.sh run
GM管理工具的url: http://114.112.69.119:6070/RPGGM/login.html
screen 命令详解
功能说明:
使用telnet或SSH远程登录linux时,如果连接非正常中断,重新连接时,系统将开一个新的session,无法恢复原来的 session.screen命令可以解决这个问题。Screen工具是一个终端多路转接器,在本质上,这意味着你能够使用一个单一的终端窗口运行多终端的应用。
语 法:
screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>]
补充说明:
screen为多重视窗管理程序。此处所谓的视窗,是指一个全屏幕的文字模式画面。通常只有在使用telnet登入主机或是使用老式的终端机时,才有可能用到screen程序。
参 数:
-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参数:
screen -S yourname -> 新建一个叫yourname的session
screen -ls -> 列出当前所有的session
screen -r yourname -> 回到yourname这个session
screen -d yourname -> 远程detach某个session(将指定的screen作业离线)
screen -d -r yourname -> 结束当前session并回到yourname这个session
在每个screen session 下,所有命令都以 ctrl+a(C-a) 开始。
C-a ? -> Help,显示简单说明
C-a c -> Create,开启新的 window
C-a n -> Next,切换到下个 window
C-a p -> Previous,前一个 window
C-a 0..9 -> 切换到第 0..9 个window
Ctrl+a [Space] -> 由視窗0循序換到視窗9
C-a C-a -> 在两个最近使用的 window 间切换
C-a x -> 锁住当前的 window,需用用户密码解锁
C-a d -> detach ,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里 每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。
C-a z -> 把当前session放到后台执行,用 shell 的 fg 命令則可回去。
C-a w -> Windows,列出已开启的 windows 有那些
C-a t -> Time,显示当前时间,和系统的 load
C-a K -> kill window,强行关闭当前的 window
C-a [ -> 进入 copy mode,在 copy mode 下可以回滚、搜索、复制就像用使用 vi 一样
C-b Backward,PageUp
C-f Forward,PageDown
H(大写) High,将光标移至左上角
L Low,将光标移至左下角
0 移到行首
$ 行末
w forward one word,以字为单位往前移
b backward one word,以字为单位往后移
Space 第一次按为标记区起点,第二次按为终点
Esc 结束 copy mode
C-a ] -> Paste,把刚刚在 copy mode 选定的内容贴上
--End--
大家在起后台服务,或者长时间执行某个脚本的时候。
是不是感觉,交互性很差,
有时,想把结果直接在终端上输出,又怕不小心关闭了终端导致进程退出? (有些sshd服务还会设置连接超时,自动退出终端)
现在用 screen 这个指令可以很好的解决跑后台服务的尴尬。
命令其实超简单的:
直接在终端上输入 screen , 这个时候,服务器端会启一个新的终端,但这个终端,与之前的普通终端不一样,它不隶属于 sshd 进程组,这样,当本地终端关闭后,服务器终端不会被 kill。
当然,优点还不止这么些,在服务器终端里执行任务时,你甚至可以随时地切换到本地终端做些其他事情,然后,要回去时,再恢复到刚才已经打开的服务器终端里,如果刚才的任务没有结束,还可以继续执行任务。
操作步骤:
首先,进入 screen -S sessionname终端。(sessionname是为了分辨你的session)
然后按 ctrl + a ,再按 d 键暂时退出终端。
当要返回时, 先查看刚才的终端进程ID, screen -list
或直接
screen -r xx (刚才的sessionname)就可以了
当然,当你开了很多个session后,打算关闭几个session,可以进入到session后,exit 一下就可以了.
总的来说, screen是可以完全替代 nohup 的,并且本身提供了较复杂的功能,但是我认为,刚才那些简单的功能足以应付日常运作。
如果对该指令感兴趣的朋友,推荐一篇文章:
http://www.ibm.com/developerworks/cn/linux/l-cn-screen/
我能够使用如下的方法开始一个叫做“radiostation”的screen对话:
tmancill@ghostrider:~$ screen -S radiostation
(此时出现一个空白的screen)
tmancill@ghostrider:~$ mp3blaster
(载入我的播放列表,然后按下play开始发射)
(按下“CTRL-a”,然后按下“d”离开)
默认会启动一个screen进程,读取/etc/scrennrc配置文件,~/.screenrc配置文件(如果有的话)\r
3.screen后面可以带的参数:\r
-c file: override默认的配置文件$HOME/.screenrc
-d [pid.tty.host]:断开screen进程(使用该命令时,screen的状态一定要是Attached,也就是说有用户连在screen里)。一般进程的名字是以pid.tty.host这种形式表示(用screen -list命令可以看出状态)。\r
-D [pid.tty.host]:与-d命令实现一样的功能,区别就是如果执行成功,会踢掉原来在screen里的用户并让他logout。\r
-r [pid.]tty.host:连上一个断开的screen进程,如果有多个断开的进程,需要指定[pid.]tty.host,常用命令\r
-d -r:连接一个screen进程,如果该进程是attached,就先踢掉远端用户再连接。\r
-D -r:连接一个screen进程,如果该进程是attached,就先踢掉远端用户并让他logout再连接\r
-ls或者-list:显示存在的screen进程,常用命令\r
-m:如果在一个Screen进程里,用快捷键crtl+a c或者直接打screen可以创建一个新窗口,screen -m可以新建一个screen进程。\r
-dm:新建一个screen,并默认是detached模式,也就是建好之后不会连上去。\r
-p number or name:预先选择一个窗口。\r
例如:如果现在有一个Screen进程,并且是dettached
4.在screen中的操作:\r
(C-a c命令指的是按下Crtl+a,然后松开,在按下c)\r
C-a “:显示Screen里的所有窗口,并可以进行选择。最常用命令
C-a c:创建新窗口,常用命令
C-a num:切换至num号窗口。窗口名一般是0-9(我这个版本最多支持创建40个窗口,C-a “命令就可以看到窗口号,在最左边)
C-a A:为当前窗口设定一个标题,常用命令
C-a d:断开一个screen的进程,常用命令
C-a D D:断开一个screen的进程并且logout
C-a K:删除当前的窗口,常用命令
C-a C-x:锁住终端
C-a C-z:挂起终端,也就是可以用jobs,fg之类的命令管理\r
C-a Z:重置终端至刚启动时的状态\r
Created By: sb123
Form Page: linux screen 的使用 教程