linux - 用户数据 (cloud-init) 脚本未在 EC2 上执行

标签 linux amazon-ec2 cloud-init

我的用户数据脚本

#!
set -e -x
echo `whoami`
su root
yum update -y
touch ~/PLEASE_WORK.txt

这是从命令中输入的:

ec2-run-instances ami-05355a6c -n 1 -g mongo-group -k mykey -f myscript.sh -t t1.micro -z us-east-1a

但是当我检查文件 /var/log/cloud-init.log 时,tail -n 5 是:

[CLOUDINIT] 2013-07-22 16:02:29,566 - cloud-init-cfg[INFO]: cloud-init-cfg ['runcmd']
[CLOUDINIT] 2013-07-22 16:02:29,583 - __init__.py[DEBUG]: restored from cache type DataSourceEc2
[CLOUDINIT] 2013-07-22 16:02:29,686 - cloud-init-cfg[DEBUG]: handling runcmd with freq=None and args=[]
[CLOUDINIT] 2013-07-22 16:02:33,691 - cloud-init-run-module[INFO]: cloud-init-run-module ['once-per-instance', 'user-scripts', 'execute', 'run-parts', '/var/lib/cloud/data/scripts']
[CLOUDINIT] 2013-07-22 16:02:33,699 - __init__.py[DEBUG]: restored from cache type DataSourceEc2

我还验证了 curl http://169.254.169.254/latest/user-data 按预期返回了我的文件。

并且没有其他错误或我的脚本的输出发生。如何让用户数据脚本在启动时正确执行?

最佳答案

实际上,cloud-init 允许将单个 shell 脚本作为输入(尽管您可能希望使用 MIME 存档进行更复杂的设置)。

OP 脚本的问题是第一行不正确。你应该使用这样的东西:

#!/bin/sh

这是因为,虽然 cloud-init 使用 #! 来识别用户脚本,但操作系统需要完整的 shebang 行才能执行脚本。

所以在 OP 的情况下发生的事情是 cloud-init 行为正确(即它下载并尝试运行脚本)但操作系统无法实际执行它。


参见:Shebang (Unix)在维基百科上

关于linux - 用户数据 (cloud-init) 脚本未在 EC2 上执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17792505/

相关文章:

linux - 如何使用 ps -u UserName 使输出仅显示 CMD

c - 64 位 GCC 上 int 的最大值是多少

python - 如何在 Amazon EC2 上安装 python 包,如 pip、numpy - ubuntu

amazon-web-services - 在Saltstack公式中检索另一个EC2实例的公共(public)IP

amazon-web-services - AWS AMI 中需要烘焙哪些内容以及使用 cloud-init 来配置哪些内容?

ssh-keys - Digital Ocean Droplet 上的 cloud-init .yaml 脚本

amazon-web-services - 如何在 Terraform 上使用 cloud-init 初始化实例

python - 屏幕命令和python

python - 无法在 Linux 上用 Python 打开具有完整路径名的文件

python - 使用 ec2 python API boto,如何从 SpotInstanceRequest 获取 spot instance_id?