SSH 的預設連接埠是 22,但連線成功與否,不代表其中的科研任務仍在執行;OpenBSD SSH 手冊列有這項預設值。SSH 斷線後,普通前景命令不能保證繼續運行。需要讓終端工作階段在客戶端斷線後仍可接回,應在遠端 Mac 上用 tmux,並先驗證重新連線和結果檔案;它不能防止主機重啟、服務終止或程序崩潰。
本文適合透過 SSH 在遠端 Mac 執行腳本、編譯或命令列分析的研究生與科研開發者。
常遇到不穩定網路的研究人員,可依照文中的檢查流程判斷任務狀態。
負責遠端科研環境交付的課題組技術人員,可用驗收步驟確認任務是否能復查。
先分清連線中斷、終端結束與主機故障
SSH 是用來連線至遠端系統的工具;在 macOS 啟用「遠端登入」後,可使用 SSH 或 SFTP 登入,相關設定方式見 Apple 的遠端登入說明。但「SSH 連線斷了」只描述本機與遠端之間的連線,不足以判定遠端命令的狀態。
| 觀察到的狀況 | 可能的任務狀態 | 低風險的下一步 |
|---|---|---|
| SSH 視窗突然關閉,沒有事先使用 tmux | 前景命令可能隨原終端工作階段結束,也可能仍有程序運行;不能只憑斷線判斷 | 重新登入後檢查程序、日誌和輸出檔 |
| SSH 斷線前,命令已在 tmux 工作階段中執行 | 客戶端連線中斷時,tmux 工作階段可能仍可接回 | 確認帳戶與主機一致,再列出並接回工作階段 |
| 重新登入後,找不到原工作階段 | 可能登入錯誤主機或帳戶,也可能是工作階段或程序已結束 | 先保存現有日誌和檔案,釐清狀態後再決定是否重跑 |
| macOS 主機重新啟動或程序崩潰 | tmux 不保證恢復主機或程序狀態 | 查明主機政策、程序錯誤和應用程式復原能力 |
前景命令與目前終端工作階段相連;重連時開啟的新 shell 並非舊終端的延續。因此,重新登入成功只能證明目前可連線,不能證明上一個計算完整結束。
| 作業方式 | SSH 客戶端斷線後的預期 | 適用範圍與限制 |
|---|---|---|
| 直接在 SSH 前景終端執行命令 | 不應預設命令會繼續 | 適合可立即完成、可安全重試的工作 |
| 在 tmux 工作階段內執行命令 | 可脫離及重新接回工作階段 | 適合終端程式;不涵蓋主機重啟或程序故障 |
使用 nohup 啟動命令 |
可忽略掛斷訊號,但不等於可接回互動終端 | GNU Coreutils 文件說明其掛斷處理方式;macOS 上的行為與輸出安排須先實測 |
| 操作圖形介面的科研軟體 | tmux 不負責保存圖形工作狀態 | 依賴軟體本身的自動儲存、檢查點或復原功能 |
GNU 的 nohup 說明針對忽略掛斷訊號作出解釋;這與 tmux 的工作階段脫離、重新接回不是同一件事。若工作需要查看進度或接回終端,應先確認使用方式符合任務需求,不要把 nohup 當成 tmux 的等效替代品。
在重跑之前先核對證據
重新連線後,先記錄登入帳戶與主機,再查看預期的工作目錄、日誌和輸出檔。若日誌仍在更新,或相關程序仍存在,就不要急著啟動第二份計算;重複執行可能覆寫檔案、佔用資源,亦可能讓後續難以分辨哪份結果對應哪次執行。
讀取結果時,請核對預期輸出是否存在、檔案能否正常開啟,以及日誌是否顯示任務已結束或發生錯誤。檔案存在不等於內容完整;若沒有明確結束記錄,就先保存現場,再決定是否使用檢查點續跑或重新執行。
用 tmux 保留並接回終端工作階段
tmux 的工作階段與 SSH 客戶端分開管理:客戶端離線後,仍可嘗試重新登入並接回原工作階段。官方 tmux 入門文件說明如何建立、脫離與重新接回工作階段;tmux 手冊則記載相關命令。
| 操作目的 | 命令 | 用途 |
|---|---|---|
| 建立具名工作階段 | tmux new -s analysis |
開啟名為 analysis 的工作階段 |
| 脫離但保留工作階段 | Ctrl-b,再按 d |
回到原 SSH shell,不結束 tmux 工作階段 |
| 列出工作階段 | tmux ls |
查看目前帳戶可見的工作階段 |
| 接回指定工作階段 | tmux attach -t analysis |
重新進入名為 analysis 的工作階段 |
可按以下步驟準備科研長任務:
- 確認目前登入的是正確的遠端 Mac、帳戶與專案目錄;先確認腳本會把日誌和結果寫到可預期的位置。
- 執行
tmux new -s analysis建立具名工作階段。名稱應能分辨用途,避免把多個無關任務混在同一個會話中。 - 在 tmux 內啟動腳本,並確認日誌開始產生、命令輸出符合預期。若程式支援檢查點或斷點續跑,先確認其儲存位置和讀取方式。
- 按
Ctrl-b,再按d,主動脫離工作階段。這樣能先確認脫離操作有效,而不是等到網路突然中斷才發現沒有準備。 - 再次 SSH 登入,執行
tmux ls查看工作階段,並以tmux attach -t analysis接回;確認畫面中的命令、日誌與程序狀態。 - 工作結束後,先確認日誌記錄與結果檔完整,再依任務需要正常結束命令與 tmux 工作階段。
提醒:tmux 保留的是終端工作階段,不是已完成的科研結果備份。若主機重啟、執行環境被終止,或程序本身崩潰,仍要依靠日誌、應用程式檢查點及可重新執行的流程復原。主機維護與資料保留方式須以實際環境規則為準。
按症狀排查原工作階段與結果
如果 tmux ls 沒有顯示預期工作階段,先不要立即重跑。tmux 官方 常見問題可用來查閱工作階段相關疑難;實際排查可按下列順序進行:
| 發現的現象 | 優先核對 | 建議處理 |
|---|---|---|
| 找不到工作階段 | 登入帳戶、主機、環境變數與工作目錄是否正確 | 修正連線目標後再查一次 |
| 工作階段存在,但命令已返回提示符 | 結束訊息、退出狀態、日誌末段和輸出檔 | 判斷是完成還是錯誤結束,保留相關證據 |
| 日誌停止更新,工作階段仍在 | 程序是否仍存在、是否等待互動輸入或遇到錯誤 | 先查看畫面與日誌,不要直接關閉程序 |
| 結果檔存在但內容不完整 | 檔案格式、大小變化、程式是否曾寫入完成標記 | 暫停發布或分析該結果,先保存副本並查明原因 |
有工作階段但沒有新輸出,不一定代表程序已崩潰;命令可能正在等待輸入,或程式把輸出緩衝到其他位置。反過來,日誌最後一行看似正常,也不能單獨證明所有輸出已寫入。應把程序狀態、日誌和結果檔放在一起判讀;若仍無法確定,保留目錄與錯誤訊息後再評估重跑。
以低風險測試驗收斷線恢復
在交付科研長任務前,先用不會覆寫正式資料的測試工作確認整個流程。不要拿唯一一份重要結果來驗證斷線保護,也不要只看能否重新登入就放行。
- 在測試目錄建立可辨識的日誌與輸出位置,確認不會碰到正式資料。
- 於 tmux 工作階段內執行一項能持續顯示進度、並產生可檢查輸出的測試命令。
- 主動脫離 tmux,再關閉 SSH 連線;重新登入後列出工作階段並接回。
- 核對程序或工作階段狀態、日誌內容,以及測試輸出能否正常讀取。
- 依照測試結果記錄適用條件與失敗時的處理方式;若無法證明輸出完整,先停止正式長任務,改善日誌或檢查點後再測。
判斷是否可放行長任務,可使用以下條件分支:
- 若工作可在終端內執行,而且測試證明 SSH 中斷後能接回 tmux、檢查日誌並確認輸出,則可採用 tmux 執行,並保留獨立的結果備份或檢查點。
- 若工作依賴互動桌面、視窗狀態或滑鼠操作,則不要把 tmux 當作保活方案;先確認軟體的自動儲存和復原方式,並以代表性工作測試。
- 若主機維護、重啟或資源管理規則不明,則先向環境管理者確認,不要假設 tmux 能跨越主機故障。
- 若重連後無法確認舊任務狀態,則先保存日誌、錯誤訊息和輸出,再決定是否重跑,避免覆寫或重複計算。
把 tmux 的保護範圍與圖形任務分開
tmux 適合在終端中執行的腳本、編譯和命令列分析;它不會替需要桌面畫面的科研軟體保持視窗互動,也不會自行替應用程式儲存未寫入的資料。Apple 的服務管理文件涵蓋 macOS 服務管理,但不能據此推定某個遠端主機的維護安排、程序保留或資料政策。
對 GUI 工作,應先確認軟體本身是否提供自動儲存、檢查點或可重新開啟的專案檔,再用一份可丟棄的測試資料驗證復原流程。若任務需要持續的圖形介面操作,tmux 只能管理終端命令,不能代替圖形工作階段的狀態保存。
因此,長任務的放行條件不是「SSH 又連上了」,而是能接回適用的工作階段、找到可用的執行證據,並確認結果檔可讀且完整。任一項無法確認,都應先停下來補足日誌或復原方案。
若目前依賴實驗室共用設備或個人電腦,常見限制包括設備無法預約到需要的時段、個人 Mac 購置成本一次支出,以及連線與資料交接要自行維護;但若工作長期持續、高負載,或必須接實體儀器與周邊,租用遠端 Mac 未必合適。若科研腳本確實需要 macOS,可先透過 RUVCLOUD 的遠端 Mac 服務資訊了解可用的使用方式,再用代表性任務驗證 SSH 重連、結果檢查與檔案匯出,依實際使用週期評估是否租用。您也可查看 RUVCLOUD 的方案與計費資訊,並在選用前確認自己的任務類型和環境需求;無法通過復原驗收的工作,應先改善流程,而不是單靠租用或 tmux 假設結果一定保留。