如何讓任務永不掉線:tmux

在做生物資訊分析的時候,我們經常是透過自己的客戶端,遠端登入伺服器進行工作。如果本地端掉線,那麼一些任務就變成掛起狀態,沒了結果,還得重新操作。儘管我們前面介紹過如何透過設定xshell讓伺服器不掉線,但是沒辦法解決突然斷網或者客戶端計算機休眠。即使我們前面介紹過使用nohup讓任務保持非掛起狀態執行,以及忘記nohup之後使用disown將任務切換為nohup狀態,但如果每條命令都使用nohup實在是比較麻煩。那麼如何才能讓任務永不掉線呢?Linux系統為我們提供了強大的screen與tmux命令。

應用場景

網路不穩定,經常掉線,導致任務經常中斷;

使用網路下載資料,例如wget或者prefetch後臺下載比較大的資料;

下班後,退出ssh登入,關機走人,任務忘了切換到nohup模式;

tmux

tmux(terminal multiplexer)是Linux上的終端複用神器,可從一個螢幕上管理多個終端。使用tmux,使用者可以連線或斷開會話,而保持終端在後臺執行。也就是登入Linux之後,開始tmux,之後所有的操作都在tmux中完成,這樣即使突然掉線了,所有的任務都還在tmux之中。

tmux的結構包括會話(session)、視窗(window)、窗格(pane)三部分,會話實質是偽終端的集合,每個窗格表示一個偽終端,多個窗格展現在一個螢幕上,這一螢幕就叫視窗。tmux的操作主要包括對會話、視窗、窗格的建立、關閉、重新命名、連線、分離、選擇等等。

其實使用tmux並不複雜,雖然tmux有非常多的功能,但是我們主要就是掌握一些基本快捷鍵就行。

1 軟體安裝

#ubuntu

apt

install

-y tmux

#centos

yum

install

-y tmux。x86_64

2 軟體使用

在命令列直接輸入tmux,就會自動開啟一個新視窗,這個就是tmux的虛擬終端,可以說是偽終端。注意最下面多了一條綠色的狀態列,表示當前一個新終端裡。接下來就可以在這個終端中執行任務了。這個任務就一直待在這個虛擬終端中,即使突然掉線了,還可以恢復任務,可以繼續執行。

如何讓任務永不掉線:tmux

3 快捷鍵

使用tmux需要經常使用快捷鍵,其中最常用的就是ctrl+b,因為Linux shell下很多快捷鍵都被佔用了,只能這樣操作了,每次先按一下ctrl+b,在使用對應的快捷鍵。注意ctrl+b是在tmux視窗中使用,在原始的shell命令列下不管用。下面列出一些最常用的快捷操作:

ctrl+b ? : 顯示快捷鍵幫助

ctrl+b d : 脫離當前會話;這樣可以暫時返回Shell介面,輸入tmux

attach

能夠重新進入之前的會話

ctrl+b 空格鍵 : 採用下一個內建佈局,這個很有意思,在多屏時,用這個就會將多有螢幕豎著展示

ctrl+b ! : 把當前視窗變為新視窗

ctrl+b

“ : 橫向向分隔視窗

ctrl+b 上下鍵: 上一個及下一個分隔視窗

ctrl+b & : 確認後退出當前tmux

ctrl+b c : 建立新視窗

ctrl+b n : 選擇下一個視窗

ctrl+b l : 最後使用的視窗

ctrl+b p : 選擇前一個視窗

ctrl+b w : 以選單方式顯示及選擇視窗

ctrl+b s : 以選單方式顯示和選擇會話。

ctrl+b t : 顯示時鐘。然後按enter鍵後就會恢復到shell終端狀態

tmux案例

接下來我們演示一條,使用tmux下載生物資料的案例。

#

1 新建會話,命名為wget

tmux new -s wget

#

2 執行命令

wget -c ftp://ftp。ncbi。nlm。nih。gov/blast/db/FASTA/swissprot。gz

#

3 按ctrl+b,然後字母d,退出會話,任務仍在執行

$

tmux new -s wget

[detached]

#

4 tmux ls檢視任務

$

tmux ls

wget: 1 windows (created Wed Jul 24 10:22:34 2019) [114x26]

#

5 重新進入wget終端,第一個引數a也可以寫成attach,任務正在執行

tmux a -t wget

#

6 關閉會話任務,如果在會話中使用ctrl + d,或者

exit

,就會在退出會話,也關閉了該會話

#

tmux ls檢視會話

$

tmux ls

#

7

kill

-session殺死會話,每個會話成為一個session

$

tmux

kill

-session -t wget

#

8 關閉所有會話

$

tmux

kill

-server

多視窗管理

如果一次建立了多個會話,tmux還可以對這些視窗進行管理,其實這個xshell自帶這個功能,使用xshell更加方便。下面列出一些快捷鍵,感興趣的可以嘗試一下,首先還是在視窗中按ctrl+b,然後使用對應的快捷鍵。

ctrl+b ” : 將當前面板平分為上下兩塊

ctrl+b % : 將當前面板平分為左右兩塊

ctrl+b x : 關閉當前面板

ctrl+b ! : 將當前面板置於新視窗;即新建一個視窗,其中僅包含當前面板

ctrl+b Ctrl+方向鍵:以1個單元格為單位移動邊緣以調整當前面板大小

如何讓任務永不掉線:tmux