实例启动时使用Amazon EC2用户数据脚本-python脚本无法运行?

时间:2019-08-11 02:51:55

标签: amazon-web-services amazon-ec2

我正在关注Running Commands on Your Linux Instance at Launch - Amazon Elastic Compute Cloud上的教程。

我有一个EC2实例,并且已经确认正在运行

python run.py
通过命令行运行

时,它完全符合我的要求(将文件写入s3)。所以在网络用户界面中,我添加了

#!/bin/bash

python run.py

进入用户数据字段。但是,当我将其备份时,什么也没有发生。我必须忽略某些东西,但不能确定它是什么。

让我感到惊讶的是,当我启动实例备份时,所有的python软件包和脚本仍然存在,我认为所有内容都会被擦除,并且每次启动后我都必须从s3复制脚本。但是我想那只是存储空间?就像我说的那样,我是新手,所以我们将不胜感激!

3 个答案:

答案 0 :(得分:3)

您提到的链接中有一条通知

  

默认情况下,用户数据脚本和cloud-init指令仅运行   在首次启动实例的启动周期中。您可以   更新您的配置,以确保您的用户数据脚本和   每次重新启动实例时都会运行cloud-init指令。

,并链接到this页以获取更多详细信息。

或者,您可以按照以下方式将作业简单地添加到crontab中(需要将SSH插入EC2实例):

@reboot python /PATH/TO/run.py

答案 1 :(得分:2)

我们通常会对用户数据脚本犯一个非常愚蠢的错误。我们忘记了它们是从root用户运行的。这意味着在运行脚本时,当前目录将是用户“ root”的HOME目录,而不是基于您的OS的Ubuntu用户或ec2-user的主目录。

这意味着如果命令成功运行,则文件可能位于相关的HOME位置。但是,用户数据脚本希望它位于其他位置。尝试给出脚本的绝对路径,看看是否可行。

答案 2 :(得分:0)

这是因为从控制台启动实例后,您已经添加了用户数据。默认情况下,用户数据仅在首次启动实例时有效。

即使在这种情况下,您正在使用的映像也应具有您所引用的文件run.py。否则,您只能传递shell命令。 查看日志文件/var/log/cloud-init-output.log会告诉您发生了什么。