ssh - 网络丢失时保持程序在 ssh 中运行

标签 ssh server gnu-screen

当笔记本电脑(Mac)失去 wifi 连接或网络时,我有一个问题如何让我的程序在 ssh 中运行。我通过 ssh 远程运行 python 程序到服务器,在运行代码之前,我通过输入“屏幕”创建了一个新屏幕。然后我运行程序并按下 ctrl+A+D 来分离屏幕。一切看起来都很好,当笔记本电脑关闭时程序继续工作(在有 WIFI 的地方)。但是,当我带着笔记本电脑走到外面几分钟并重新打开笔记本电脑时,它显示“写入失败:管道损坏”并且程序停止了。我猜问题是因为笔记本电脑失去了网络连接。有没有办法解决这个问题,这样我就可以把我的笔记本电脑带到任何地方并保持我的程序运行?

最佳答案

打开 screen SSH 连接后在远程服务器上,这样你就有一个持久的 session ,而不是在你的本地机器上。

如果你这样做了,请注意,如果你断开连接,你仍然会断开连接,但再次通过 SSH 连接并重新打开 screen session 恢复工作。

local$ ssh remote.server
remote$ screen -ls # list screens
remote$ screen -dr <screen name> # force reconnect to screen session

编辑:

随着使用 screen您将获得一个可以恢复的永久 session 。此 session 将在您开始的地方进行。如果你想确保你继续在远程服务器上运行一些东西,那么首先 SSH然后启动 screen在 Remote 上。

如果您断开连接,则只有您的 SSH连接将被终止,您将与您的 screen 断开连接 session ,但不会停止。您可以 SSH再次进入并重新连接到 screen session 。

尝试这个:
local$ ssh remote.server
remote$ screen -S date
# screen starts with name 'date'. if it's the first time you start screen on
# this box it might display some welcome message where you need to press enter

remote-screen$ while true; do date; sleep 1; done
# this will show the time every second

# disconnect your network: the ssh connection will be terminated
# open console again and continue

local$ ssh remote.server
remote$ screen -dr date

重新连接后screen session 您应该看到日期仍在继续而没有任何停顿。

关于ssh - 网络丢失时保持程序在 ssh 中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26891003/

相关文章:

java - ProcessBuilder 和 ssh 调用远程命令

mongodb - 我的 .js 文件应该放在哪里?

html - 网站在 "open with Live Server"(vs 代码)上看起来不错,但浏览器中没有加载 CSS

ubuntu - 无法附加 screen session

android - 如何配置 Acralyzer?

python - Python 的 Emacs 批量缩进

windows - Signalr WebSockets 无法在启用了 Websocket 协议(protocol)的 Windows Server 2012 R2 + IIS 8.5 上工作,但可以在本地开发计算机上工作(Win 10)

oracle - BEA-141297-无法获取服务器文件锁

linux - 有没有办法用键盘命令启动 UNIX screen ?

linux - 如何防止program.sh完成后 "screen -dmS sessionName program.sh"消失?