【问题标题】:AWS process launched from SSH terminate when SSH hangs up当 SSH 挂起时,从 SSH 启动的 AWS 进程终止
【发布时间】:2016-09-15 02:12:01
【问题描述】:

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

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

SSH 挂断后,如何让代码在我的 AWS EC2 实例上继续运行;如何监控这样一个过程的输出?

【问题讨论】:

  • 您可以安装“screen”并在其中运行您的进程,在您断开与 ssh 的连接后,它将继续运行并附加输出,您可以返回该进程“screen -r”或者您可以使用 nohup 分离进程并将所有输出重定向到文件以查看其输出,如下所示: nohup command 2>&1 > ./process.log &
  • @Mahakala:使用nohup 我什么都看不到,我没有得到提示,所以我什至无法在服务器上启动我的代码!我错过了什么吗?你能多谈谈screen吗?
  • 是的 nohup 从终端和标准输入中分离出来,因此无法输入。看看屏幕,这取决于你运行的是 apt-get screen 或 yum install screen。之后,只需像往常一样运行屏幕命令工作,您就可以退出它并轻松返回(ctrl+a d,表示按 control 和 a,然后按 a 从中分离)。请参阅此处的教程以获取有用的快捷方式:rackaid.com/blog/linux-screen-tutorial-and-how-to
  • 不加评论的反对票是没有帮助的。
  • SSH 可能仍会终止,但不会影响进程在屏幕内运行,它会进入后台,因此您可以轻松地 ssh 回到计算机并恢复屏幕会话。如果您想让 ssh 保持活动状态,您可能需要检查 ServerAliveInterval ssh 选项,我在这方面没有取得太大成功。

标签: ssh amazon-ec2


【解决方案1】:

使用screen

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

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

remote> screen -r

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

【讨论】:

    【解决方案2】:

    以下是如何配置 ssh 连接以保持活动状态:

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

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

    ServerAliveInterval 120
    

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

    vi /etc/ssh/sshd_config
    

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

    ClientAliveInterval 120
    ClientAliveCountMax 720
    

    这适用于其他操作系统设置上的 linux YMMV

    【讨论】:

    • 我试过了(在我理解这个问题之前)但它失败了。问题已通过screen 解决。
    【解决方案3】:

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

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

    【讨论】:

    • 随着进程继续运行,我需要本地文件; nohup-ed SSH 会在本地重定向吗?
    • 另外:nohup 我什么都看不到,我没有得到提示,所以我什至无法在服务器上启动我的代码!我错过了什么吗?
    • 还有:这是设计使然。 nohup 切断与标准输入的进程关系。所以你不能输入它。可能的解决方案是将标准输入也重定向到文件。
    猜你喜欢
    • 1970-01-01
    • 2013-04-01
    • 2016-12-02
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    • 2018-01-28
    相关资源
    最近更新 更多