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