登出 Linux 後繼續執行程式 - 使用 tmux
1 |
在 Linux 跑 ASP.NET Core 網站,我目前會用兩種做法:1) 包成服務用 systemctl 啟動 參考 2) 部署到 Docker 容器 參考。
兩種做法都需要額外的步驟,因此,臨時性程式我會直接 ssh 登入執行,不用時按 Ctrl-C 結束,但缺點是必須維持登入狀態,一旦 ssh 斷線程式便會結束。同樣的困擾在使用 Python http.server 將目錄轉成靜態網站也曾遇到,當時因此學會 nohup,而 PO 文後好幾位讀者力推更方便的 tmux (感謝 Min、劉兆偉、黃柏瑋 分享),昨天提到 Coding4Fun 智慧插座用電監測即屬中短期執行、用完即關性質,便決定試試 tmux,用完覺得真香,特 PO 文分享!
tmux 與 screen 都是 Linux 的終端機多工視窗工具,而 tmux 靠著更友善的操作介面 參考,成為大多數人的首選。
tmux 功能很多,我整理了參考資料放在最後,這篇將聚焦在如何用它分割視窗及離線執行程式。
GNU screen 是 Linux 內建程式,tmux 則需額外安裝,在 CentOS/RHEL 用 sudo yum install tmux
、Ubuntu 用 sudo apt-get install tmux
可完成安裝。
ssh/telnet 登入 Linux 輸入 tmux 將開啟新的 Session,特徵是下方的反白工作列:
tmux 的操作環境可分為 Session (工作階段)、Window (視窗)、Pane (分割視窗) 三種,一個 Session 可建立多個 Window,每個 Window 可再分割成多個 Pane。Window 固定佔滿整個畫面,故使用者每次只能看到一個 Window,但同一畫面可同時出現多個 Pane。
在 tmux 操作都靠快捷鍵,當用的按鍵如下:
- Ctrl+b,然後按 %
新增水平分割視窗 (Pane)
- Ctrl+b、然後按 "
新增垂直分割視窗
分割視窗可以再分割
- Ctrl+b、然後按 o 輸流切換到不同子視窗進行操作
- Ctrl+b、然後按方向鍵
切換到指定方向的分割視窗 - Ctrl+b、然後按 !
將分割視窗升級成 Window - Ctrl+b、然後按 x
關閉目前的分割視窗 - Ctrl+b、然後按空白鍵
套用不同佈局 - Ctrl+b、然後按 c
建立新視窗 - Ctrl+b、然後按 w
使用視覺化選單切換視窗
- Ctrl+b、然後按 n 或 p
切換到下一個、上一個視窗 - Ctrl+b、然後按數字鍵
切換到指定的視窗 - Ctrl+b、然後按 &
關閉目前的視窗 - Ctrl+b、然後按 d
卸離目前的 tmux 工作階段(但工作階段會繼續執行)
而要做到離線後繼續執行,靠的是最後一個「Ctrl+b、d」(Detach)快速鍵,按下後會退出 tmux 畫面回到 Shell,此時工作階裡的程式會繼續執行,不受退出 Shell、登出 ssh 影響。
若要接回 tmux 工作階段,使用 tmux ls
查詢卸離中的工作階段,tmux a
或 tmux a -t Session編號
回到 tmux 工作階段,就這麼簡單。
Linux 工具箱再添好用傢俬一件。
【參考資料】
- Linux tmux 終端機管理工具使用教學 by G.T.Wang
- How to Use tmux on Linux (and Why It’s Better Than Screen) by Dave McKay
Comments
# by Josch
如果要同時對所有的panel下指令,可以用 :setw synchronize-panes,在同時間要建多個相同環境可以省下很多功。