首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >aws ec2远程运行无限时间作业

aws ec2远程运行无限时间作业
EN

Stack Overflow用户
提问于 2021-01-09 00:38:41
回答 3查看 564关注 0票数 2

我有一个AWS EC2实例,我想在它上运行一个无限时间的作业。但是,我不想在我的实例中使用SSH来运行命令。

我基本上需要运行一个python脚本,它可以无限期地执行工作,所以我想从我的EC2实例中运行EC2,这样我就可以远程运行它,只要我的实例正在运行,script.py脚本就在运行。

更清楚的是,如果我运行像sudo service httpd start这样的命令,我就不需要将SSHed保留到实例中,就可以知道通信正在被服务。类似地,我希望运行一个命令,即使我终止到实例的SSH连接,script.py仍然在运行。

我想到的一个解决方案是让本地机器显式地连接到实例,并在一个无限循环中运行命令,但我想避免这种情况。

另一个问题是,是否有一种方法可以扩展到多个执行同一任务的实例。

我也尝试过在etc目录中编辑etc,但我确认该作业没有运行。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-01-09 01:15:01

通常,要使应用程序完全自动化,使其扩展到新实例,并且在实例启动/停止/重新启动之后重新启动,您必须创建自己的自定义系统单元。单元文件将负责运行脚本,并在需要时自动启动它。

要使所有完全自动化,您必须在用户数据中设置脚本和单元文件,最好是在自定义发射模板中设置,这可以构成自动标度组的基础。

票数 2
EN

Stack Overflow用户

发布于 2021-01-09 01:18:06

您的问题并不是真正与python或aws相关的问题,而是更多的Linux问题。这么说,要实现你想要的,有很多种选择。

如果您只想在退出系统后继续运行程序,那么您可以使用bg +注销。

例如:

代码语言:javascript
复制
$ python script.py
ctrl-z
$ bg
$ disown -h
$ exit 

您可以正常启动命令,按键盘上的ctrl键即可挂起该任务。

接下来,调用bg,它将最后一个挂起的任务切换到后台运行。

在运行disown -h之后,这将从当前shell的控件中移除该进程(一旦退出ssh,它将允许它持久化)。

最后,您可以安全地退出ssh,您的进程将无限期地继续运行。

还有许多其他选项可以使用,但这是最简单的一个。

票数 1
EN

Stack Overflow用户

发布于 2021-01-09 00:58:25

如果我正确地理解了您的问题,您将要求在EC2实例上启动脚本,并在终止SSH连接后继续运行它。

为此您可以使用tmux。输入tmux new启动一个新的tmux会话,然后运行您要运行的任何脚本。然后按Ctrl+B,然后按D。这将使您与tmux会话断开连接,但tmux会话仍将运行您的脚本。现在,您可以安全地关闭SSH连接,脚本仍在运行。如果您想再次访问运行脚本的终端,可以在控制台中键入tmux a,它将使运行脚本的会话返回。

或者,您也可以使用screen,尽管我会使用tmux来完成这个任务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65638187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档