python - 在 Amazon Linux 2 上启动时执行 python 脚本
问题描述
我正在尝试在 Amazon Linux 2 实例上执行 python 脚本。在我的user-data
部分中,我有一个脚本,它将 python 脚本从 S3 存储桶复制到实例并像这样执行它:
#!/bin/bash
# e - stops the script if there is an error
# x - output every command in /var/log/syslog
set -e -x
# set AWS region
echo "export AWS_DEFAULT_REGION=us-east-1" >> /etc/profile
source /etc/profile
# copy python script from the s3 bucket
aws s3 cp s3://${bucket_name}/ /home/ec2-user --recursive
sudo python3 my_python_script.py
问题是python脚本似乎根本没有被执行。
注意:python 脚本从存储桶中复制得很好
我在这里缺少什么?
更新:检查后/var/log/cloud-init-output.log
看起来问题出在python脚本中,找不到boto3
模块:
+ python3 /home/ec2-user/my_python_script.py
Traceback (most recent call last):
File "/home/ec2-user/my_python_script.py", line 1, in <module>
import boto3
ModuleNotFoundError: No module named 'boto3'
Dec 10 15:52:25 cloud-init[3697]: util.py[WARNING]: Failed running /var/lib/cloud/instance/scripts/part-001 [1]
Dec 10 15:52:25 cloud-init[3697]: cc_scripts_user.py[WARNING]: Failed to run module scripts-user (scripts in /var/lib/cloud/instance/scripts)
Dec 10 15:52:25 cloud-init[3697]: util.py[WARNING]: Running module scripts-user (<module 'cloudinit.config.cc_scripts_user' from '/usr/lib/python2.7/site-packages/cloudinit/config/cc_scripts_user.pyc'>) failed
问题是我确实安装了boto3
模块。在创建自定义 AMI 映像之前,我创建了一个自定义 AMI 映像,其中安装了所有模块(我曾经pip3
安装它们)
更新2
我验证了该图像确实在库boto3
中安装了软件包:python3
[ec2-user@ip-ip ~]$ python3
Python 3.7.9 (default, Aug 27 2020, 21:59:41)
[GCC 7.3.1 20180712 (Red Hat 7.3.1-9)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import boto3
>>>
更新3
问题的原因是我安装了boto3
我user
唯一的包(即pip3 install boto3 --user
),然后我创建了 AMI 映像。因此,将波纹管添加到我的user-data
脚本后,它工作正常
#!/bin/bash
...
sudo pip3 install boto3
sudo python3 my_python_script.py
解决方案
您可以将输出重定向到一个文件并读取它以查看错误:您是否有 python3,您的实例是否具有访问此存储桶的凭据/角色,您的脚本是否需要任何第三方,您可以尝试运行上面的脚本吗root
?本地第一,运行命令应该是python3 /home/ec2-user/my_python_script.py
?
推荐阅读
- java - 如何开发一个可以使用 java 回答问题的消息机器人
- angular - 更改角度组件中的通知图标
- php - oci8、php7 和 Oracle 10.1 兼容性
- exception - 检查失败:带有音乐播放器插件的 CheckException(env)
- c++ - Crypto++ AES 代码和链接上的未定义符号
- python - 为什么我在 Django 中有这个错误?
- react-admin - React Admin:如何使用引导程序而不是 Material Design?
- jquery - 无法使用 jquery ajax 提交 2 个表单
- fonts - 在 Sublime Text 中缩小字体大小时,字体看起来很糟糕
- java - Java 浮点数格式