在 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 atmux a -t Session編號 回到 tmux 工作階段,就這麼簡單。

Linux 工具箱再添好用傢俬一件。

【參考資料】


Comments

# by Josch

如果要同時對所有的panel下指令,可以用 :setw synchronize-panes,在同時間要建多個相同環境可以省下很多功。

Post a comment