防止ssh終耑中途意外中斷的工具——screen

字號+ 編輯: 国内TP粉 修訂: 种花家 來源: 2025-03-27 我要說兩句(0)

常常擔心終耑連接斷開導致編譯或者後台命令中途斷線退出, 怎麽辦?

這個問題困擾一些新手。這裡推薦使用這個screen工具, 根據筆者理解, 它就是通過保存終耑連接的會話臨時存儲爲session來實現的終耑會話持久化。

用yum或apt工具安裝screen

# centos系列用這個命令安裝
yum install screen
# debian或者烏班圖用apt工具來安裝
apt-get install screen

screen使用方法

創建一個終耑會話:

screen -S 這裡填寫會話名稱

這個命令也可以省略到-S, 此時會建立一個隨機名稱的終耑會話。

列舉出現在所有的session會話

screen -ls

恢複一個終耑會話

screen -r 之前你創建過的會話名稱

銷毀一個終耑會話的方法

如果正在會話裡:
Ctrl+a 然後按 Ctrl+d 也就是detach的簡寫

用screen -ls拿到會話列表, 並用kill命令+進程號的方式殺死列表裡對應的會話進程。

會話session明明存在, 但無法用screen -r來恢複

假如你之前強行關閉了screen有關的終耑窗口, 會導致名爲screen -r xxxx的命令進程仍然在系統進程表裡, 此時這個session id會被screen認爲是“被佔用”的。

你打開兩個終耑窗口,其中一個窗口連著screen, 另一個窗口也嘗試用screen -r命令同時訪問這個會話, 也可以複現這個故障。報錯如下:

There is a screen on:
    XXXX.pts-n.xxxxxxxxxx (01/01/03 xx:xx:xx)(Attached)
There is no screen to be resumed matching XXXX.

 解決問題的方法是加一個參數-d, 強行銷毀之前的會話, 以介入你的目標會話:

screen -r -d <會話ID>

除了screen以外, 也有一個比較方便的實現單個命令掛起到後台的方法, 讓你不必擔心退出終耑影響命令的執行, 叫做disown, 傳送門 https://www.wkwkk.com/articles/d09914ce12105ae6.html

screen會話session無法顯示中文, 全是亂碼問號

編輯器編輯.screenrc文档

vim ~/.screenrc

替換内容如下

defutf8 on
defencoding utf8
encoding UTF-8


 

閲完此文,您的感想如何?
  • 有用

    198

  • 沒用

    4

  • 開心

    16

  • 憤怒

    7

  • 可憐

    3

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: 2702237 13835667

相關課文
  • 防止退出linux終耑退出之後導致的nohup進程強制退出

  • Linux系統下word文档轉成pdf的辦法

  • ubuntu和debian安裝nginx或者tengine報錯, 找不到pcre依賴庫的解決辦法

  • 常見的web中間件請求返回狀態碼

我要說說
網上賓友點評