【问题标题】:ec2实例启动时用户数据中的python脚本未运行
【发布时间】:2022-01-23 15:05:20
【问题描述】:

我正在尝试通过在 aws ec2 上运行自定义检测脚本来进行一些对象检测。我为实例添加了如下用户数据脚本

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0

--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"

#cloud-config
cloud_final_modules:
- [scripts-user, always]

--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/sh
cd /home/ubuntu/path/to/script
sudo python3 strawberry_count_new.py

但是,当我的 lambda 函数将图像复制到实例时,脚本不会执行检测。我没有得到任何输出。当我检查我正在运行的进程时,python 脚本正在运行。我不确定为什么它不处理来自 s3 的输入图像。当我在实例中运行相同的脚本时,它会处理相同的输入图像。

【问题讨论】:

  • 通常我们忘记了用户的脚本是从root用户运行的。您是否使用相同的 root 用户?
  • @Nirmal 我如何检查我是否使用 root 用户?

标签: python-3.x amazon-web-services amazon-s3 amazon-ec2 aws-lambda


【解决方案1】:

要检查脚本的输出,在这种情况下,最好在脚本中放置足够的日志记录,您可以将用户数据输出重定向到特定路径,然后再检查此输出文件,这将包括以下行作为脚本的第一行:

exec > >(tee /var/log/user-data-aux.log|logger -t user-data -s 2>/dev/console) 2>&1

稍后您可以验证发生了什么。

【讨论】:

  • 输出是否已经记录在 cloud-init-output.log 中?这会创建不同类型的日志吗?
  • 这只会在用户数据脚本中注册命令的输出,没有出现在 cloud-init-output.log 中的额外信息,但您可以检查 cloud-init-output.log也看看发生了什么。
  • python脚本是否在后台运行?如果我使用用户数据启动脚本,它是否需要访问实例中文件的权限?
  • 没错,用户数据脚本实际上是一个普通的脚本,但是一旦机器启动并运行它就会自动运行,没什么特别的。所以,是的,您需要保证在脚本中运行的任务获得了访问 X 文件所需的权限。但我认为你不应该有权限问题,因为用户数据运行的默认用户是 root。
  • 我看到你在脚本中使用了 sudo,你不应该,因为它是运行脚本的 root 用户。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-24
  • 1970-01-01
  • 1970-01-01
  • 2018-09-12
  • 1970-01-01
  • 2019-07-03
  • 2017-06-10
相关资源
最近更新 更多