【发布时间】:2014-02-04 14:44:02
【问题描述】:
代码:
#!/usr/bin/env python
import boto.ec2
conn_ec2 = boto.ec2.connect_to_region('us-east-1') # access keys are environment vars
my_code = """#!/usr/bin/env python
import sys
sys.stdout = open('file', 'w')
print 'test'
"""
reservation = conn_ec2.run_instances(image_id = 'ami-a73264ce',
key_name = 'backendkey',
instance_type = 't1.micro',
security_groups = ['backend'],
instance_initiated_shutdown_behavior = 'terminate',
user_data = my_code)
使用正确的设置启动实例(它是公共 Ubuntu 12.04,64 位,映像),我可以正常 SSH 进入它。用户数据脚本似乎已正确加载:我可以在 /var/lib/cloud/instance/user-data.txt(以及 /var/lib/cloud/instance/scripts/part-001)和 EC2 控制台上看到它。
但就是这样,脚本似乎没有被执行。在this answer 之后,我检查了/var/log/cloud-init.log 文件,但它似乎不包含任何与我的脚本相关的错误消息(好吧,也许我遗漏了一些东西-here is a gist 的内容是cloud-init.log)。
我错过了什么?
【问题讨论】:
-
您的
file正在创建吗?您是否尝试过完整路径/tmp/file,以便检查文件是否正在创建。 -
不,
file未创建。甚至没有完整路径(谢谢提醒,顺便说一句)。 -
您是否尝试过运行 bash 脚本?或者您可以尝试从 AWS 控制台创建一个实例(从 AWS 控制台传递用户数据),看看您的脚本是否有问题。
-
刚刚做了。有效!我使用了
my_code = '''#!/bin/sh mkdir /home/ubuntu/testfolder''',删除了编码,当我通过 SSH 连接到机器时,testfolder就在那里。我想知道为什么 Python 脚本不起作用。我想我可以将它保存到 S3 存储桶中,然后从 bash 脚本中调用它,但是我仍然无法让 Python 脚本直接工作。 -
这是另一个奇怪的地方:在 Ubuntu 上,`my_code = '''#!/bin/sh mkdir /home/ubuntu/testfolder''' 仅在分成两行时才有效,使用 shebang 行单独作为第一行。但在 Amazon Linux 上,它可以作为单线运行,没有任何问题。
标签: python-2.7 amazon-web-services amazon-ec2 boto