当SSH挂起时,从SSH启动的AWS进程终止

时间:2016-05-18 14:11:44

标签: ssh amazon-ec2

我使用SSH连接到我的AWS EC2实例并运行需要很长时间才能完成的代码。我发现,如果我的本地计算机休眠(或者即使我将其置于无人看管状态),SSH连接也会挂起(这本身并不致命),但这似乎终止了我使用SSH启动的EC2实例上的代码。

另外,我使用SSH来本地监视远程代码的异常,所以即使有一种方法告诉远程进程在SSH消失后保持活着,我仍然需要一种在本地看到输出的方法进程继续运行(没有SSH)。

SSH挂断后如何在我的AWS EC2实例上保持代码运行;如何监控此类流程的输出?

3 个答案:

答案 0 :(得分:0)

当您关闭tty(在您的情况下为ssh close)时,您的进程将获得一个SIGHUP,并且SIGHUP上的默认操作将终止。为了避免这种情况,您可以使用命令nohup来捕获并且不将SIGHUP发送到您的命令,或者将SIGHUP捕获到您的代码中并忽略它。

有很多方法可以跟踪后台进程,但最简单的方法是将其写入文件,而在其他ssh中可以读取该文件。如果您的进程实际上是命令行上的命令,则可以将其标准输出和标准错误重定向到文件。当这样的文件不断获取新内容时,继续阅读它以刷新可能会很烦人,在这种情况下命令“tail -f”很方便。

答案 1 :(得分:0)

使用screen

local> ssh ...
remote> screen 
remote+screen> python long_running.py ...

然后您可以从screen分离,甚至与SSH断开连接,当您再次通过SSH重新登录时,您可以

remote> screen -r

重新连接到正在运行的代码。

答案 2 :(得分:0)

以下是如何配置ssh连接以保持活力:

vi  ~/.ssh/config  # on your client side

添加此行以每120秒发送一个“空数据包”:

ServerAliveInterval 120

如果您拥有服务器端,请执行类似的更改:

vi /etc/ssh/sshd_config

在配置文件底部添加这些行

ClientAliveInterval 120
ClientAliveCountMax 720

这是针对其他操作系统设置的Linux YMMV