Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7656745
  • 博文数量: 1770
  • 博客积分: 18684
  • 博客等级: 上将
  • 技术积分: 16357
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-02 10:28
个人简介

啥也没写

文章分类

全部博文(1770)

文章存档

2024年(15)

2023年(44)

2022年(39)

2021年(46)

2020年(43)

2019年(27)

2018年(44)

2017年(50)

2016年(47)

2015年(15)

2014年(21)

2013年(43)

2012年(143)

2011年(228)

2010年(263)

2009年(384)

2008年(246)

2007年(30)

2006年(38)

2005年(2)

2004年(1)

分类: LINUX

2009-02-02 17:26:56

screen是系统管理员手中的一件利器,下面我把它介绍给你,相信你会和我一样,认可这个非常棒的软件
一,什么情况下会用到screen?
   比如说,我们在运行一个非常费时间的程序,注意:可能我们是在通过ssh远程连接到托管在机房中的机器上,
  如果这个期间,网络出现中断(这个可以说是很正常的情况,别不信,我讲一件我亲历的例子),
  则我们正在运行的程序就会中止(为什么会这样?我稍后解答)
 
  如何保证当网络连接断开后,程序仍然在继续运行?而且可以随时的取回我们的屏幕?
  答案就是screen
 
  说明:1,我们做技术工作,要把各种极限情况考虑在内:有一个例子:有一次我在做 reiserfsck
       (我通过ssh远程连接到托管在机房中的机器上)
         那个分区的容量是2T,在进行了一半多(5个多小时过去了)我们的网络管理员不小心碰到了
         路由器的电源线,完了,所有的一切都要重新开始,当时我还不会使用screen,
         否则可以避免这场灾难。
        
         2,网络中断后,我们远程运行的程序会自动中止,这个是为什么?
           很简单,实验一下,我们现在就ssh到一台机器上,
           
          我们运行这个命令: ps auxfww
         
         注意:    f参数: forest  就是以树结构来显示进程
             
       root       756  0.0  0.0  3508  336 ?        S     2008  11:20 /usr/sbin/sshd                                     
       root      8933  0.0  0.1  6776 1820 ?        S    23:52   0:00  \_ /usr/sbin/sshd                                 
       root      8935  0.0  0.1  5616 1512 pts/3    S    23:52   0:00      \_ -bash                                      
       root      8977  0.0  0.0  2900  952 pts/3    R    23:53   0:00          \_ ps auxfww
        
         可以看到当前正在执行的 ps auxfww 这个命令的位置,它的父进程是 -bash,而 -bash则是建立在pts/3这个tty上面
         当网络中断时,pts/3上面所建立的连接会终止,当8935这个进程停止时,我们在其下面运行的命令自然也会停止。
        
         3,多问一个问题,会nohup不可以吗?
        
         这个问题问得好,用nohup当然可以,但注意:nohup需要把进程扔到后台去运行,仍以上面的reiserfsck为例,
         运行此命令时需要和程序进行交互,这种情况下用nohup就没办法输入了。
         而且screen有更多更强大的功能,当然更值得学习
        
二, 安装screen
     screen不是标配的命令,但是centos的yum源中包含,用
      yum install screen即可实现安装。
     
      它的官网:
     
三,使用screen的例子:
    1,运行screen
     screen -S down_video
      直接运行screen就可以启动一个session(会话),但是还是给它做一下命名比较好,
      这样可以避免和其他的session混淆,更可以一目了然的知道这个session的功能
     
      说明 : -S  给session命名
     
     2,如何列出系统中已在运行的screen session?
       screen -ls
        或着 screen -list
       
        例子:
        [root@dev ~]# screen -ls
      There is a screen on:
               4083.down_video (Attached)
      1 Socket in /var/run/screen/S-root.
      说明(Attached和Detached是screen session的两种状态,分别表示:正在被连接 和 已经被断开)
       
       
       
     3,取回我们的screen
       进入screen之后,此时我们可以进行我们的工作,
      比如我要用wget 下载一个大型的视频 或用php写入大量的数据等
     
      注意此时我们不用再担心我们到此远程机器的连接断开,
      可以在此时直接关闭窗口
     
      然后我们重新ssh连接到此远程机器,
      登录后用screen -ls进行检查
     
      [root@dev ~]# screen -ls
     There is a screen on:
        4083.down_video (Detached)
     1 Socket in /var/run/screen/S-root.
状态显示 down_video这个screen session已经被 断开(detach)
    此时我们用screen -r可以取回进行,
    
     说明: -r :取回一个已被断开的screen session
    
     例:   [root@dev ~]# screen -r down_video
         可以看到我们的程序仍在运行,中间未曾停止,而且此时我们又可以控制它了。
           
           
    4,如何中断一个 screen session?
    看例子:
   
      [root@dev ~]# screen -ls
There is a screen on:
        4083.down_video (Attached)
1 Socket in /var/run/screen/S-root.
请注意: 当前看到的session : down_video 正在被连接使用中,
       这时我想使用此session
        
    [root@dev ~]# screen -r down_video
There is a screen on:
        4083.down_video (Attached)
There is no screen to be resumed matching down_video.
   此时用 -r 不能取到此 screen session
  这时只能用 -d 参数来强制中断它
  [root@dev ~]# screen -d down_video
[4083.down_video detached.]
[root@dev ~]# screen -r down_video
再用 -r 取回 screen就成功了

注意:原来的被我们中断的连接会显示 :
[root@dev ~]# screen -r down_video
[remote detached]
四:使用screen进行远程协作:
1,什么情况下会用到这个远程协作?
   比如:你需要给在远方的同事在一台服务器上面演示一项功能的操作步骤,
  又如:你和同事需要连接到同一台服务器上面协作完成一项工作,每个人执行其中的一部分
 
2,步骤:
   需要有一个人先登录到服务器,比如你的伙伴先登录,
  登录后执行:
  [root@dev ~]# screen -S cooperate
 
  下面我们以同一帐号登录到同一台机器上面:
  先查看情况:
  [root@dev ~]# screen -ls
There is a screen on:
        4195.cooperate  (Attached)
1 Socket in /var/run/screen/S-root.
我们可以看到cooperate这个session是正在被连接的,
下面我们连接进入此session,即: 我们和伙伴使用同一个帐号进入同一个screen session
[root@dev ~]# screen -x cooperate
说明: -x:Attach to a not detached screen session. (Multi display mode)
         就是连接 到一个未被断开的screen session,
         注意此时两边的显示内容是完全相同,
        
注意:此时我们和伙伴都可以输入命令了,大家在一个session开始协同工作,
     比如:咱们在这边执行: ls
     伙伴的屏幕上会有相同的显示信息
 
下面我再说一句:
screen的功能可不止于此,它还有很多巨强大的功能,我的一个系统管理员朋友说:"我在工作中简直离不开screen了",其他的功能,我会专门再写一篇内容进行介绍   
        
 
 
 
1.安装screen
---------------------------------
yum install screen
--------------------------------

2.运行 screen
--------------------------------
screen
--------------------------------

3.用法
Ctrl+a 然后按c 建立一个新的screen 会话
Ctrl+a 然后按n 跳转到下一个screen 会话
Ctrl+a 然后按p 返回到上一个screen 会话
Ctrl+a 然后按d 将当前的screen 会话放在背景执行
Ctrl+a 然后按(大写)S 分离一个screen 会话出来,分离后用Ctrl+a 然后按tab键 在分离出来的各screen间跳转。
screen -ls 列出当前所有的screen会话
screen -r 进程号 之前Ctrl+a 然后按d 放在背景执行的会话 呼叫回来。

ssh中如果发生了突然断线 那么你重新登陆后 screen -ls 会发现 有screen的状态是处于(Attached)状态 此刻我们使用 screen -d 将他强行放到背景,然后再用screen -r 进程号将他呼叫回来。


如果 screen -ls 看到有死亡的会话 可以用screen -wipe 进程号 将他杀掉。

eg:

#screen -list可以看到正在运行的screen实例
There is a screen on:
80338.ttyp3.chh (Detached)
1 Socket in /tmp/screens/S-chh.
返回screen -r 80338
彻底退出:#exit

阅读(1674) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~