赞
踩
在刚接触Linux时最怕的就是SSH远程登录Linux VPS编译安装程序时(比如安装lnmp)网络突然断开,或者其他情况导致不得不与远程SSH服务器链接断开,远程执行的命令也被迫停止,只能重新连接,重新运行。今天就给VPSer们介绍一款远程会话管理工具 - screen命令。
screen 的作用是什么呢?
使用telnet或SSH远程登录linux时,如果连接非正常中断,重新连接时,系统将开一个新的session,无法恢复原来的session.screen命令可以解决这个问题。Screen工具是一个终端多路转接器,在本质上,这意味着你能够使用一个单一的终端窗口运行多终端的应用。
Screen是一款由GNU计划开发的用于命令行终端切换的自由软件。用户可以通过该软件同时连接多个本地或远程的命令行会话,并在其间自由切换。GNU screen可以看作是窗口管理器的命令行界面版本。它提供了统一的管理多个会话的界面和相应的功能。
除部分精简的系统或者定制的系统大部分都安装了screen命令,也可以自己安装
CentOS系统可以执行:yum install screen ;
Debian/Ubuntu系统执行:apt-get install screen 。
如果提示screen: command not found 命令不存,在可以执行:yum install screen 或 apt-get install screen安装。
screen [ -AmRvx -ls -wipe ] [ -d <作业名称> ] [ -h <行数> ] [ -r <作业名称> ] [ -s ] [ -S <作业名称>]
选项 | 描述 |
-A | 将所有的视窗都调整为目前终端机的大小 |
-d <作业名称> | 将指定的screen作业离线 |
-h <行数> | 指定视窗的缓冲区行数 |
-m | 即使目前已在作业中的screen作业,仍强制建立新的screen作业 |
-R | 先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业 |
-s | 指定建立新视窗时,所要执行的shell |
-S <作业名称> | 指定screen作业的名称 |
-v | 显示版本信息 |
-ls 或 --list | 显示目前所有screen作业 |
-wipe | 检查目前所有的screen作业,并删除已经无法使用的screen作业 |
创建screen,screen会话取一个baoshan的名字,方便分辩,执行:
1 . screen -S baoshan
2. 运行你需要的执行的代码
3. Ctrl+A D(即按住Ctrl,依次再按A,D),使得前台的命令窗口会话中的程序关闭,后台仍在运行。
这步操作,会把你的前台客户端断了,但后台还是在跑的。不用怕。此时服务器属于(Detached)状态。
如果你不想把你客户端命令窗口断了,因为断了你就无法实时看到后台输出结果,那就只执行前2步即可。
一旦你这边网络断了,你 前台命令窗口还是会断了,哈哈。但是放心,后台还是在跑。此时服务器属于(Detached)状态
如果你这边网络断了,你 前台命令窗口会断了,就无法看到前台输出结果,但可以重新连接,恢复前台screen会话输出显示。可以再执行:
screen -r baoshan
--------------------------------------------------
查看当前的screen进程
scren -ls
[root@base ~]# screen -ls
There are screens on:
1533.pts-0.base (Detached)
1508.jock (Detached)
1493.tom (Detached)
1478.david (Detached)
29894.python (11/10/18 01:31:35) (Attached)
Sockets in /var/run/screen/S-root.
1478.david (Detached) 1478 表示该screen的进程号,后面你想人为关闭该会话,就kill -9 1478.就变成dead状态,然后你看他不爽,你还可以screen -wipe 会自动把dead状态的screen清除掉。 david表示你前面给screen取的名字
(Detached)表示前台screen会话已断开了(但服务器后台程序还在跑),但在随后重新连接(attach)该会话,会在前台客户端显示当前的输出。
(Dead???)表示screen已经死亡,后台肯定不在跑,你也没法继续重新连接会话了。
(Attached)表示screen后台还在正常跑着,前台也正常连接着,这是正常模式。
重新连接会话,只对detached状态有效。1533 是上面screen -ls 你根据你的screen取的别名 的前面的进程号码。
screen -r 1533
关闭screen的会话,一般对attached状态操作,1533同上面的一样
执行:exit ,会提示:[screen is terminating],表示已经成功退出screen会话。
或者直接: kill -9 1533 #杀死进程
screen -ls #查看里程状态
There are screens on:
1533.pts-0.base (Dead ???) #已杀死的进程
1508.jock (Detached)
1493.tom (Detached)
1478.david (Detached)
Remove dead screens with 'screen -wipe'.
4 Sockets in /var/run/screen/S-root.
清除dead会话
如果由于某种原因其中一个会话死掉(如人为杀掉会话),这里screen -list 会显示该会话为dead状态,使用screen -wipe命令清除该会话
[root@base ~]# screen -wipe 1533 # 清空死亡进程
There is a screen on:
1533.pts-0.base (Removed)
1 socket wiped out.
No Sockets found in /var/run/screen/S-root.
screen用在网络环境不好的地方非常的有用。
建议各位运行程序的时候都开启screen
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。