後臺任務命令screen詳解

後臺任務命令screen詳解

前言:

作爲一位運維人員,我們經常需要SSH或者telent 遠程登錄到Linux服務器,經常運行一些需要很長時間才能完成的任務,比如下載、系統備份、文件傳輸等。通常情況下我們都是爲每一個這樣的任務開一個遠程終端窗口,因爲它們執行的時間太長了。必須等待它們執行完畢,在此期間不能關掉窗口或者斷開連接,否則這個任務就會被殺掉,一切半途而廢了。screen的出現,解決了這一問題。screen 會話命令可以保持本地和服務器斷開後,程序繼續在服務器上運行,並且運行結束後,輸出最後的結果。功能結果相當於 nohup command &,但是功能遠比nohup強大。

一、screen功能簡介

  • 會話恢復
    只要Screen本身沒有終止,在其內部運行的會話都可以恢復。這一點對於遠程登錄的用戶特別有用——即使網絡連接中斷,用戶也不會失去對已經打開的命令行會話的控制。只要再次登錄到主機上執行screen -r就可以恢復會話的運行。同樣在暫時離開的時候,也可以執行分離命令detach,在保證裏面的程序正常運行的情況下讓Screen掛起(切換到後臺)。這一點和圖形界面下的VNC很相似。

  • 多窗口
    在Screen環境下,所有的會話都獨立的運行,並擁有各自的編號、輸入、輸出和窗口緩存。用戶可以通過快捷鍵在不同的窗口下切換,並可以自由的重定向各個窗口的輸入和輸出。Screen實現了基本的文本操作,如複製粘貼等;還提供了類似滾動條的功能,可以查看窗口狀況的歷史記錄。窗口還可以被分區和命名,還可以監視後臺窗口的活動。

  • 會話共享
    Screen可以讓一個或多個用戶從不同終端多次登錄一個會話,並共享會話的所有特性(比如可以看到完全相同的輸出)。它同時提供了窗口訪問權限的機制,可以對窗口進行密碼保護

二、screen的使用

1、系統一般默認沒有安裝screen,所以我們就先進行安裝。
root@ljc ~]# rpm -q screen	      ### 檢查是否安裝
package screen is not installed   ###沒有安裝screen
[root@ljc ~]# yum install screen -y
2、語法說明:
screen [-AmRvx -ls -wipe][-d <作業名稱>][-h <行數>][-r <作業名稱>][-s ][-S <作業名稱>]
3、參數說明:
-A  將所有的視窗都調整爲目前終端機的大小。
-d     <作業名稱>  將指定的screen作業離線。
-h     <行數>  指定視窗的緩衝區行數。
-m  即使目前已在作業中的screen作業,仍強制建立新的screen作業。
-r      <作業名稱>  恢復離線的screen作業。
-R  先試圖恢復離線的作業。若找不到離線的作業,即建立新的screen作業。
-s  指定建立新視窗時,所要執行的shell。
-S    <作業名稱>  指定screen作業的名稱。
-v  顯示版本信息。
-x  恢復之前離線的screen作業。
-ls或--list  顯示目前所有的screen作業。
-wipe  檢查目前所有的screen作業,並刪除已經無法使用的screen作業。
4、參數這麼多,但是,我們常用的參數命令爲以下幾個:
screen -S session_name           # 新建一個叫session_name的session
screen -ls(或者screen -list)    # 列出當前所有的session
screen -r session_name           # 回到session_name這個session
screen -d session_name           # 遠程detach某個session
screen -d -r session_name        # 結束當前session並回到session_name這個session
在每個screen session下,ctrl+a+d爲較常用的操作,作用爲:將任務掛起放入後臺執行,並會回到還沒進 screen 時的狀態,此時即使logout也不影響。
5、screen的使用

直接敲命令screen就可以啓動它。但是這樣啓動的screen會話沒有名字,實踐上推薦爲每個screen會話取一個名字,方便分辨:
[root@ljc ~]# screen -S test
此時會新建一個窗口,彷彿什麼也沒有發生似的,其實你已經進入Screen的世界。

此時如果我們執行一條命令,比如dd if=/dev/zero of=/data/1 count=500M bs=10M出現如下,光標會一直在閃哦,表示任務在執行。
在這裏插入圖片描述
此時我們用ctrl+a+d使任務進入後臺,出現detached提示
在這裏插入圖片描述
此時我們用top命令可以看到,有一個dd命令在執行,並且負載越來越高。只要不終止screen的進程,任務就會一直在後頭執行。此時我們就可以做其他想做的事,而不必一直等着任務執行完成。也不必擔心任務被中斷,即使使用了logout命令。
在這裏插入圖片描述
我們可以用命令找到會話信息:

[root@ljc ~]# screen -ls  
There is a screen on:
        8798.test       (Attached)
1 Socket in /var/run/screen/S-root.

其中8798是進程的pid,test是會話的名稱。
之後我們用screen -r 8798或者screen -r test進入screen,重新連接會話,將任務調取至前臺,若還是光標閃爍,表示任務未執行完成。
但出現如下結果,表示任務已經執行完成。但是有終端在連接會話。

[root@ljc ~]# screen -r 8798
There is a screen on:
        8798.test       (Attached)  ##attached表示有終端在連接會話
There is no screen to be resumed matching 8798.

此時我們可以使用命令exit退出screen會話
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章