当网络丢失时,让程序在ssh中运行

时间:2014-11-12 15:48:15

标签: ssh server gnu-screen

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

1 个答案:

答案 0 :(得分:3)

在SSH连接后打开远程服务器上的screen,这样您就可以在那里进行持久会话,而不是在本地方框上。

如果您这样做,请注意,如果您断开连接但是再次进行SSH连接并重新打开screen会话以恢复工作,您仍会断开连接。

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

修改

使用screen可以获得可以恢复的永久会话。这个课程将在你开始的地方生活。如果您想确保在远程服务器上继续运行某些内容,请先SSH然后启动远程服务器上的screen

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

试试这个:

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会话后,您应该会看到日期仍然没有任何停顿。