你 是不是经常需要 SSH 或者 telent 远程登录到 Linux 服务器?你是不是经常为一些长时间运行的任务而头疼,比如系统备份、ftp 传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为他们执行的时间太长了。必须等待它执行完毕,在此期间可不能关掉窗口或者断开连 接,否则这个任务就会被杀掉,一切半途而废了。 或者我们起一个服务,比如说esmi,会有终端输出,只有在启动程序的那个终端才能看到终端输出,这个终端不可能永远不关掉,以后再要看输出就没办法了。用nohup? 还有些登录工具不支持标签窗口,同一台服务器上执行多个任务时就不得不打开多个窗口,到后面窗口一多自己都找不到哪个窗口在干什么了。 试试看screen吧,一定会有惊喜。 简 单来说,Screen是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。Screen中有会话的概念,用户可以在一个screen会话中创建多 个screen窗口,在每一个screen窗口中就像操作一个真实的telnet/SSH连接窗口那样。在使用过程中可以退出screen,甚至可以关掉登录窗口,下次再进去重新挂上screen会话,所有工作全部都会恢复。 举个例子,登录进服务器后,在screen会话里启动esmi,退出会话后,甚至关掉登录窗口后,下次再要看esmi的输出,只要重新挂上原先的screen会话,那所有终端输出又都能看到了。 启动screen的方法,很简单,直接用screen命令就可以。 这样就启动了一个screen的窗口,你可以随意执行shell命令,就像你在一个真正的shell环境里一样。 之后你如果打exit,就会直接退出screen,注意,这是真正的退出,如果你希望重新回到这个scren窗口,那在退出时就不能直接exit,要用Ctrl-a d,就是按住Ctrl,再按a,然后再单独按d。 过一会儿你想再回到刚刚的screen窗口,用命令screen -ls $ screen -ls There is a screen on: 15112.pts-5.test205 (Detached) 1 Socket in /tmp/uscreens/S-zhulp. 如果只有一个screen会话,那就直接用screen -r恢复,试试看,刚刚退出前的窗口就又出现了。 如果你在退出screen后,又另外打开了一个screen会话,那用screen -ls时就会出现多个会话显示 $ screen -ls There are screens on: 16466.pts-23.test205 (Detached) 15112.pts-5.test205 (Detached) 2 Sockets in /tmp/uscreens/S-zhulp 这时就需要指定screen的会话ID来进入到不同的会话,像这样: $ screen -r 16466
有的时候,特别是网络不稳定的时候,连接会被中断,不用担心,screen上的环境都还在,不过有可能你会发现用screen -ls时的显示是这样的: $ screen -ls There is a screen on: 16466.pts-23.test205 (Attached) 1 Socket in /tmp/uscreens/S-zhulp. 这时用screen -r 会显示 $ screen -r There is a screen on: 16466.pts-23.test205 (Attached) There is no screen to be resumed. 如何中断一个 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.