SSH 遠端登出後繼續執行

昨天朋友問如果使用 PieTTY 遠端連線進主機,下了一個指令之後,這時候把 PieTTY 關掉,指令會不會繼續執行,還是關掉就斷掉了?小蛙之前也有類似的問題,問了精通 Linux 的同事後,同事給了一個 screen 的方法,小蛙記錄一下基本 screen 用法以及 Google 查到的其他用法。

使用 screen 讓指令繼續執行

screen
# 下你要的指令
ctrl + a, d

這樣就可以斷線了,指令會繼續在背景執行。
常用指令如下,更詳細資訊可參考 screen 教學 @ Tsung’s Blog

# 進入 screen 環境
screen
# ctrl + a 即是進入命令模式
# 進入命令模式之後,後面接一個指令
# 開啟一個新視窗並切換到此視窗
ctrl + a, c
# 切換到下一個視窗
ctrl + a, n
# 切換到上一個使用的視窗,有點類似 cd - 切換到上一個工作目錄
ctrl + a, ctrl + a
# 顯示所有目前視窗,顯示結果如下 0$ bash  1-$ bash  2*$ bash
# * 表示目前使用視窗
ctrl + a, w
# 接續上述指令,可切換到該視窗
ctrl + a, 數字
# 另一個切換視窗的方法
ctrl + ', 數字
# 關閉目前視窗
ctrl + a, k
# 斷開 screen 並放背景執行
ctrl + a, d
# 查看目前 screen
screen -ls
26130.pts-0.xxxxx       (2018年06月09日 19時32分11秒)   (Detached)
25831.pts-0.xxxxx       (2018年06月09日 19時15分57秒)   (Detached)
# 接回 screen
screen -r 26130

使用 nohup 指令

當從一個連線斷開的時候,系統會收到 SIGHUP 信號,如果使用 nohup 執行指令,則不會受到 SIGHUP 的影響繼續執行。

# 以 nohup 執行並且加入「&」丟到背景執行,執行的結果會存在 nohup.out
nohup xxxxxxxx &

20190307 額外補充 nohup 指令,因為小蛙要執行的指令會吐出一堆東西,而 nohup.out 檔案也會越來越大,但小蛙不想要有這個檔案(全看自己需求)。跟上個指令的差別在 >/dev/null 2>&1 這樣就會把錯誤訊息跟執行時的訊息都捨棄 ~~

參考來源:How do I use the nohup command without getting nohup.out?

nohup command > /dev/null 2>&1  
# doesn't create nohup.out

nohup command >/dev/null 2>&1 & 
# runs in background, still doesn't create nohup.out

參考資料

  1. screen 教學 @ Tsung’s Blog
  2. [linux[tips]nohup: 讓command在遠端執行,不因登出而中斷 @ 真實旅程 :: 痞客邦 ::
  3. How do I use the nohup command without getting nohup.out?

    發佈留言

    發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

    這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料