1、應用場景
做爲系統運維工程師咱們常常要經過SSH遠程鏈接Linux服務器,對系統進行維護。若是你正在運行一個大型的須要長時間運行的任務,諸如對數據庫備份,對應用系統進行升級等,很不湊巧這一天這一刻你接到了女朋友速回的強制命令。這時你就遇到了兩難問題:要麼立刻關閉窗口,斷開鏈接,速去向女朋友報到,但是這樣的結果,當前正在運行任務就會over,極可能就會獲得老大的另外一番訓斥;要麼你就強忍着把這樣一個任務運行完再去見你那位女皇,結果你們可想而知。shell
仍是現身說法你們理解更爲真實!數據庫
如今準備了一臺遠程服務器,IP地址爲172.16.1.90,在遠端經過SSH鏈接上去,運行一個任務(或程序),如vi /etc/passwd服務器
在遠端服務器上使用w、pstree等工具查看,能夠看到正在運行的進程網絡
假設我如今把ssh會話窗口關閉來模擬者因爲網絡鏈接緣由形成ssh會話忽然中斷的現象運維
在回到遠端服務器上使用w、pstree等工具查看,能夠看到剛纔打開的進程已經被終止(SIGHUP)了,你內心必定在想「可惡」!,其中緣由主要是當用戶註銷(logout)或網絡中斷時,終端會收到HUP(hangup)信號,從而關閉其全部子進程。ssh
難道沒有一個一箭雙鵰的方法了嗎?怎樣才能避免這樣的境遇不會再出現,即當咱們斷開鏈接關閉終端窗口時,咱們當前正在運行的任務(進程)再也不受到影響!ide
這時screen跳出來了說,何不試試個人威力呢?screen何許人也?【注:還可讓讓進程忽略 HUP 信號,如使用nohup工具】工具
官方的解釋是這樣的:blog
The screen utility allows you to have multiple logins on just one terminal. Screen is useful for users who telnet into a machine or are connected via a dumb terminal, but want to use more than just one login.進程
個人理解是:screen這工個工具可讓你在一個終端上擁有多個登陸,運行多個終端應用,能夠很好解決使用ssh遠程鏈接Linux時,因爲鏈接中斷形成會話不能恢復的問題。
【來自IBM官網】Screen是一個能夠在多個進程之間多路複用一個物理終端的窗口管理器。Screen中有會話的概念,用戶能夠在一個screen會話中建立多個screen窗口,在每個screen窗口中就像操做一個真實的telnet/SSH鏈接窗口那樣。
2、安裝
yum -y install screen
讓咱們再試着模擬剛纔的場景,不過咱們此次但是使用的「screen」這把利器。
在遠端服務器上使用w、pstree等工具查看,比較一下和剛纔看到的結果有什麼不同
如今再把ssh會話窗口關閉,看看此次和上次關閉有什麼不一樣,好像並無什麼不一樣,其實大否則,讓咱們在遠端服務器上使用w、pstree等工具查看,發現雖然遠程會話關閉了,但開啓的進程並不有結束
但是問題又來了,怎麼恢復剛纔的會話呢?讓咱們從新使用ssh鏈接上遠程服務器後,使用screen –ls 命令列出當前有哪些screen會話在運行
是否是看到一個會話,其會話ID爲3527,這就好辦了,使用screen –r 3527 從新創建起剛纔中斷的會話
是否是剛纔的會話又「重現」了,是否是很神奇!想想這對於咱們的開發人員、運維工程師來說絕對是一大福音。
4、進階使用
(1)[root@lamp ~]# screen -S editsample #啓動一個名稱爲editsample的會話
備註:能夠開啓多個screen會話
[root@lamp ~]# screen -ls
There is a screen on:
3917.edit (Attached)
1 Socket in /var/run/screen/S-root.而後你就能夠在剛纔打開的會話中執行你要的任務了,這樣即便鏈接被中斷,也不會形成任務中斷,多麼好啊!
(2)把一個正在運行的會話「搶」過來
[root@lamp ~]# screen -d –r #screen –d -x也能夠達到相似的效果
我如今使用screen開啓了一個editsample的會話,並運行了vi /etc/passwd這個進程
接下來我在另外一個ssh終端窗口操做
當我執行screen –d -r命令後,發現會話已經到我這邊了,這個命令對於做爲運維工程師處處「流竄」的咱們特別有用
(3)會話的擴展
【ctrl+A C】在一個screen會話中建立一個新的窗口,至關於建立一個新的shell
提示:先按ctrl+A組合鍵,再按C鍵
【ctrl+A 】在窗口間進行切換
【ctrl+A N】切換到下一個窗口
【ctrl+A P】切換到上一個窗口
【ctrl+A 0…9】切換到指定編號的窗口
【ctrl+A W】顯示全部窗口列表
能夠看到當前screen會話有3個會話窗口,編號分別爲0、一、2,當前活動窗口的編號爲2
【ctrl+A D】退出screen會話,能夠經過screen -r恢復會話
5、與 nohup比較
nohup能夠臨時救急,可是當咱們要運行多個後臺這樣的命令而且不因網絡鏈接斷開而中斷時,screen無疑是更好的解決方法
6、總結
screen在實際應用中確實較爲經常使用,是運維管理人員必學工具之一!