Ssh

如何防止程序在其 ssh 會話終止時終止?

  • August 10, 2016

我有一個非常舊的控制台應用程序,我想讓它更有彈性。該程序是這樣使用的:

  • 使用者使用自定義終端模擬器通過 ssh 連接到遠端機器
  • 使用者啟動一個 shell 腳本
  • shell 腳本可能會啟動一個長時間執行的進度數據庫程序。

顯然,有時使用者只是失去了與機器的 ssh 連接,在這種情況下,ssh 會話終止,內部執行的 shell 腳本終止,最後進度數據庫程序也終止。在千分之一的情況下,這會導致數據庫損壞,所以我想防止它發生。

到目前為止我嘗試了什麼:

  • 在啟動 shell 腳本之前啟動螢幕或 tmux 會話 - 這不起作用,因為應用程序需要將 TERM 變數設置為 at386(並且它完全繞過 termcap/terminfo ……呃……)
  • nohup/disown the progress 程序 - 這不起作用,因為 shell 腳本和程序程序以看似晦澀的方式不斷地相互通信

關於如何確保在 ssh 會話被終止時進度過程不會終止的任何其他想法?

添加term at386到您的 .screenrc 以覆蓋 TERM。如果這沒有幫助,請嘗試dtach而不是 Screen (它本身不做任何終端仿真)。

在許多情況下,最簡單的解決方案是使用nohup非互動式程序並將其置於後台使用&並將標準輸出和標準錯誤重定向到文件。

引用自:https://unix.stackexchange.com/questions/13661