1. 程式人生 > >SSH遠端會話管理工具

SSH遠端會話管理工具

在剛接觸Linux時最怕的就是SSH遠端登入Linux VPS編譯安裝程式時(比如安裝lnmp)網路突然斷開,或者其他情況導致不得不與遠端SSH伺服器連結斷開,遠端執行的命令也被迫停止,只能重新連線,重新執行。今天就給VPSer們介紹一款遠端會話管理工具 - screen命令

screen 的作用是什麼呢?

使用telnet或SSH遠端登入linux時,如果連線非正常中斷,重新連線時,系統將開一個新的session,無法恢復原來的session.screen命令可以解決這個問題。Screen工具是一個終端多路轉接器,在本質上,這意味著你能夠使用一個單一的終端視窗執行多終端的應用。

1.screen命令總結

Screen是一款由GNU計劃開發的用於命令列終端切換的自由軟體。使用者可以通過該軟體同時連線多個本地或遠端的命令列會話,並在其間自由切換。GNU screen可以看作是視窗管理器的命令列介面版本。它提供了統一的管理多個會話的介面和相應的功能。

2、如何安裝screen命令?

除部分精簡的系統或者定製的系統大部分都安裝了screen命令,也可以自己安裝

CentOS系統可以執行:yum install screen

Debian/Ubuntu系統執行:apt-get install screen

如果提示screen: command not found 命令不存,在可以執行:yum install screen 或 apt-get install screen安裝。

3、screen命令使用方法?

3.1 語法

screen [ -AmRvx -ls -wipe ] [ -d <作業名稱> ] [ -h <行數> ] [ -r <作業名稱> ] [ -s ] [ -S <作業名稱>]

3.2 選項

選項

描述

-A

將所有的視窗都調整為目前終端機的大小

-d <作業名稱>

將指定的screen作業離線

-h <行數>

指定視窗的緩衝區行數

-m

即使目前已在作業中的screen作業,仍強制建立新的screen作業

-R

先試圖恢復離線的作業。若找不到離線的作業,即建立新的screen作業

-s

指定建立新視窗時,所要執行的shell

-S <作業名稱>

指定screen作業的名稱

-v

顯示版本資訊

-ls 或 --list

顯示目前所有screen作業

-wipe

檢查目前所有的screen作業,並刪除已經無法使用的screen作業

3.3 常用的使用方法舉例

建立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

[[email protected] ~]# 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命令清除該會話

[[email protected] ~]# 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