使用SSH在另一个AWS实例(来自AWS实例)上运行长时间运行的python脚本

使用SSH在另一个AWS实例(来自AWS实例)上运行长时间运行的python脚本,python,amazon-web-services,ssh,subprocess,Python,Amazon Web Services,Ssh,Subprocess,我正在考虑使用中详述的策略,使用SSH在另一个AWS实例(来自AWS实例)上运行python脚本。但是,这个python脚本可能需要几天才能完成,我担心SSH连接可能会中断,导致脚本在远程实例上停止(如果发生这种情况,这不是世界末日,但这意味着我必须从头开始重新启动脚本,这样就不会经常发生这种情况)。两个AWS实例之间的SSH连接在几天内中断的可能性有多大?有没有简单的方法可以使这种连接更加稳定,同时仍然保持SSH提供的控制台转发 (我不能使用AWS的SSM,因为SSM命令的最大超时值为48小时

我正在考虑使用中详述的策略,使用SSH在另一个AWS实例(来自AWS实例)上运行python脚本。但是,这个python脚本可能需要几天才能完成,我担心SSH连接可能会中断,导致脚本在远程实例上停止(如果发生这种情况,这不是世界末日,但这意味着我必须从头开始重新启动脚本,这样就不会经常发生这种情况)。两个AWS实例之间的SSH连接在几天内中断的可能性有多大?有没有简单的方法可以使这种连接更加稳定,同时仍然保持SSH提供的控制台转发


(我不能使用AWS的SSM,因为SSM命令的最大超时值为48小时)

SSH旨在提供对交互式shell的登录。这不是构建机器间通信的好方法

我建议采用一种松散耦合的方法:

  • 实例-A将工作请求推送到Amazon SQS队列
  • 实例B有一个“工作者”应用程序正在等待工作。它定期轮询等待工作的SQS队列。当收到工作请求时,它将处理该请求
你还需要决定如果工人失败或没有完成工作该怎么办。通常,消息将超时并重新出现在队列上,供另一个工作进程处理。但是,您的场景可能要简单得多,只有一个工作人员

通过SQS发送工作请求的好处是工作可以排队,等待工作人员完成以前的任务。此外,如果您希望并行处理作业,则可以生成多个worker


请参阅:

感谢您的回复!我希望使用SSH之类的东西,因为控制台转发很重要(我将定期检查实例a上tmuxshell中运行的脚本,并希望在同一个shell中看到实例B脚本的输出)。基本上,我需要SSH所做的一切,除非没有断开连接的可能性。我希望异常也能像使用subprocess/SSH一样被转发。我可以使用s3设计我自己的伪日志流系统,但我尽量让事情简单。有关我的用例的更多信息,我使用实例A作为开发盒,实例B作为CNN模型培训的GPU盒(每小时更昂贵)。另一个好处是dev-box可以同时运行多个培训课程。我希望能够签入模型培训,但希望在dev框上运行的脚本在完成时自动关闭实例B(我已经使用boto3编写了这方面的代码)。我试图限制复杂性,因为我将把这个项目转移给其他开发人员,并希望限制系统如何工作的学习曲线。或者,SSM将为我的目的工作,但不幸的是,执行超时的最长时间是48小时,我很可能会参加比这更长的培训课程。您知道有什么方法可以使SSM命令的运行时间超过48小时吗?