# SSH 教學:SSH 遠端不中斷跑程式 ###### tags:`技術` `SSH` ## 前言 相信經常使用 SSH 連線遠端 server 工作的人經常碰到一件事,就是如果在 server 上跑一些用時較長的程式(例如模型訓練)時,遇到 SSH 斷線或登出後,程式就會被迫中止,之後又得再重跑一次,這對我們來說是非常麻煩的。 因此,本文章將教你如何讓程式在 SSH 斷線或登出後依然可以繼續執行。 ## 方法一:nohup ### 斷線後不中斷 每當我們 SSH 斷線時,SSH 都會收到**掛斷訊號(HUP)**,這會使我們還在上面跑的程式被迫停止。使用 `nohup` 可以讓 SSH server 忽略 HUP 指令繼續運行,以下以 python 腳本為例: ```shell nohup python your_script.py > output.log 2>&1 & ``` - `nohup`:忽略掛斷訊號(HUP) - `> output.log 2>&1`:將 stdout 和 stderr 重導到檔案 - `&`:讓程式在背景執行 透過這種方式,即使我們關閉 SSH 連線或本地電腦,程式仍然可以繼續運行。 ### 如何終止程式 如果我們想中斷程式運行的話,我們可以使用 `kill` 指令: ```shell kill -9 PID ``` `PID` 是該 process 的編號,可以透過 `ps` 來尋找: ```shell ps -aux | grep your_script.py ``` ## 方法二:tmux `tmux` 是一個 Linux 的**終端機管理工具**,具有**分割視窗、同時開啟多個終端機**的功能。其中 `tmux` 有個功能叫做 `session`,我們可以利用將程式放到 `tmux` 創立的 `session` 上跑,`session` 會保存我們程式的運行狀態,即使我們斷線了程式依然繼續執行,除非我們主動把 tmux server 砍掉或把遠端 server 重開機。 :::warning 這邊暫時不會講到太理論面的東西,之後會再補上或者撰寫新文章。 ::: 輸入下方指令可以建立新的 `session`,然後直接在 `session` 中執行你的程式: ```shell tmux new -s <your_session_name> ``` 若斷線,可以透過以下方式重新回到 `session` 中。 ```shell tmux attach -t <your_session_name> ``` 如果忘記自己當初設的 session name 的話,可以透過下方方式查詢此 server 建立的 session: ```shell tmux ls ``` ## 總結 以上兩種都是可以讓程式不會受到 SSH 斷線就停止運作的方法。由於 `tmux session` 可以直接在終端機上面查看輸出,相較於方法一更為方便,因此實務上我們更常使用方法二。 ## 參考資料 1.keyboy(2022 年 11 月 23 日)。[Linux Note] SSH遠端跑程式登出後不中斷。iT 邦幫忙。https://ithelp.ithome.com.tw/articles/10309065 2.andyou(2017 年)。什麼是 tmux。https://andyyou.github.io/2017/11/27/tmux-notes/
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up