請參考
在 linux 伺服器上跑模型的時候,有時會在終端會話中持續了一段時間後超時斷開,或者因為意外情況斷網,如果正常在命令列終端執行程式時,此時會中斷程式的進行,這很惱火,這就意味著要讓程式持續執行,就必須得保持主機和伺服器的連線,程式跑一晚上,主機就得開一晚上,那我還要伺服器幹什麼,為了解決這個問題, screen 是個及其有用的方法。
功能介紹
screen
是一個非常強大的終端複用器,它在Linux和類Unix系統中有著廣泛的用途。以下是screen
的一些主要用途:
-
保持會話在斷開連線後繼續執行: 當你透過SSH等遠端連線工具連線到伺服器時,如果網路連線意外斷開,你的工作可能會丟失。使用
screen
,即使遠端連線斷開,你的會話也會被保留,並且可以在重新連線後恢復。 -
多工處理:
screen
允許你在一個終端視窗中建立多個會話(稱為“視窗”),並在它們之間輕鬆切換。這對於同時執行多個程序或命令列任務非常有用。 -
協作工作:
screen
支援多個使用者同時連線到同一個會話,這意味著你可以與團隊成員協作工作,即使你們身處不同的地方。 -
指令碼和自動化:
screen
可以與指令碼結合使用,以自動化複雜的任務或流程。例如,你可以編寫一個指令碼來啟動screen
會話,執行特定的命令,然後在完成後自動關閉會話。
總之,screen
是一個非常靈活且功能強大的工具,它能夠提高你在Linux環境下的工作效率,特別是在遠端工作和多工處理方面。
下載與安裝步驟
下載 screen 元件
# CentOS
yum install screen
# Debian/Ubuntu
apt install screen
如果此時發生報錯:
說明你沒有 root 許可權,你可以透過 sudo -s 獲取 root 許可權後再執行這個操作,如果你和我一樣,作為伺服器的使用者而不是擁有者,本身就沒有 root 許可權,可以透過下面的步驟安裝^{[1]}:
(1)下載安裝包到本地
apt-get download your-package-name
(2)安裝到本地
dpkg -x your-package.deb your-dir
(3)將 screen 命令 新增到全域性環境中
找到你本地使用者的 ~/.bashrc 檔案
vim ~/.bashrc # 輸入i進入編輯模式
# 在.bashrc檔案最後面,新增該路徑,按esc 輸入:wq 儲存並退出
export PATH=$PATH:/your_dir/usr/bin/
source ~/.bashrc # 路徑生效
在終端輸入命令 screen -V
,顯示如下介面,即為安裝成功。
screen 的使用
在終端視窗,輸入命令 screen
,即可啟動 screen ,創造一個對話。但如果你沒有 root 許可權,則會發生下面的報錯:
發生這個報錯的原因是因為 screen 在執行過程中,需要在根目錄下建立資料夾,而這個過程需要 root 許可權,所以,我們選擇改變 screen 執行過程中建立資料夾的路徑即可^{[2]}:
(1) 建立 .screen 資料夾,並給予許可權
mkdir ~/.screen && chmod 700 ~/.screen
(2) 將該路徑新增到全域性變數
export SCREENDIR=$HOME/.screen
(3) 執行生效
source ~/.bashrc
具體使用方法介紹
以下是一些基本的screen
使用方法,部分參考^{[3-4]}:
-
啟動新的
screen
會話: 你可以透過以下命令啟動一個新的screen
會話:screen -S session_name
其中
session_name
是你給這個screen
會話起的名字。如果你只輸入了
screen
也可以啟動一個會話,會自動命名,這裡這個session_name 用處並不大,你既可以透過這個名字來訪問會話,也可以透過 ID 來訪問會話,而 ID 可以透過下條命令獲取。 -
列出所有
screen
會話: 要檢視當前執行的所有screen
會話,可以使用:screen -ls
如上圖所示,這一命令顯示了當前所有對話的 ID 、name 和狀態,其中狀態包括:
-
Attached:表示當前screen正在作為主終端使用,為活躍狀態。
-
Detached:表示當前screen正在後臺使用,為非激發狀態。
-
-
暫時分離當前
screen
會話: 在screen
會話中,按下Ctrl
+A
然後按D
可以分離當前會話,即使你斷開連線,會話也會繼續執行。分離當前會話後,screen -ls
狀態顯示 Detached ,但這並不影響該會話執行的程式:
-
重新連線到
screen
會話 and 連線其他會話: 如果你之前啟動了一個screen
會話,並且它還在執行,你可以使用以下命令重新連線到這個會話(注意,這是針對 Detached 狀態的會話):screen -r session_name
對於仍處於 Attached 狀態的會話,可以直接採用如下命令連線:
screen session_name
如果你不確定會話的名稱,可以使用會話ID代替,
screen -ls
命令會列出所有的會話ID。 -
退出
screen
會話: 要退出當前的screen
會話,你可以在會話中輸入:exit
或者使用快捷鍵:
Ctrl + D
也可以在主終端內:
screen -S [pid/Name] -X quit
注意: 退出當前會話後,會話執行的程式會被中斷,在執行
screen -ls
也無法找到該會話。 -
建立新的視窗: 在Screen環境下,一個對話可以建立多個視窗。使用者可以透過快捷鍵在不同的視窗下切換,並可以自由的重定向各個視窗的輸入和輸出。在
screen
會話中,你可以建立多個視窗,使用以下命令:Ctrl + A Ctrl + C
這將建立一個新的視窗,並且你可以在不同的視窗之間切換。
-
在視窗之間切換: 要切換到其他視窗,可以使用:
Ctrl + A 數字鍵 0 - 9
或者使用:
Ctrl + A ctrl + A
-
關閉當前視窗: 要關閉當前視窗,可以使用:
Ctrl + A K
這些是screen
的一些基本用法。screen
還有很多高階功能,比如複製貼上文字、分屏顯示等,可以透過檢視screen
的手冊頁(man screen
)來獲取更多資訊。
參考博文
[1] https://www.cnblogs.com/yanqiang/p/13476546.html
[2] https://blog.csdn.net/csy294745333/article/details/104960857
[3] https://zhuanlan.zhihu.com/p/405968623
[4]