Jor*_*elf 7 ubuntu amazon-ec2 amazon-web-services cloud-init
我是 cloud-init 的新手,我的最终目标是每次 EC2 Spot 实例变为活动状态时运行 R 脚本,但为了测试它,我创建了一个按需 Ubuntu 12.04 实例并创建了一个简单的脚本,但之后没有任何反应重启。以下是我采取的步骤:
/var/lib/cloud/scripts/per-bootsudo vi script.sh#!/bin/sh
回显“测试”
sudo reboot此时,我认为当实例重新启动时我应该看到“测试”打印,但那里什么也没有。我去看了一下/var/log/cloud-init.log,没有发现任何错误或异常。
我显然错过了一些东西,所以任何正确方向的提示将不胜感激!
谢谢!
在我看来,接受的答案是不够的,所以在我花了整个上午的时间来探究这个问题的根源之后,我将写下我的观点,因为我相信人们会发现这很有用并节省时间。
如果scripts-user模块设置为始终运行,则runcmd:cloudinit 的部分将在每次启动时运行。
这可以通过在您的云配置文件中添加以下部分来完成:
cloud_final_modules:
- [scripts-user, always]
Run Code Online (Sandbox Code Playgroud)
如果您想在每次启动时运行某些脚本,那么您需要将其放在
/var/lib/cloud/scripts/per-boot/文件夹。为此,请将以下部分添加到您的云配置文件中,
write_files:
- content: |
#!/bin/bash
echo "Hello World. The time is now $(date -R)!"
path: /var/lib/cloud/scripts/per-boot/myScript.sh
permissions: "0755"
Run Code Online (Sandbox Code Playgroud)
现在每次我重新启动 EC2 实例时它都会运行myScript.sh
cloud-config在 Rhel 8 上安装 amazon ssm 代理的完整示例
#cloud-config
cloud_final_modules:
- rightscale_userdata
- scripts-per-once
- scripts-per-boot
- scripts-per-instance
- scripts-user
- keys-to-console
- phone-home
- final-message
write_files:
- content: |
#!/bin/bash
echo "Hello World. The time is now $(date -R)!"
path: /var/lib/cloud/scripts/per-boot/myScript.sh
permissions: "0755"
runcmd:
- sudo dnf install -y python3
- sudo yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm
- sudo systemctl enable amazon-ssm-agent
- sudo systemctl start amazon-ssm-agent
Run Code Online (Sandbox Code Playgroud)
请注意,在这种情况下,在第一次启动myScript.sh之前执行runcmd:,后续启动仅执行myScript.sh
小智 5
如果我们想调试cloud-init中的用户数据,我们可以尝试以下步骤:
使用上述命令,cloud-init 重新运行。我们可以查看/var/log/cloud-init.log下的cloud-init.log来检查是否成功执行。
| 归档时间: |
|
| 查看次数: |
18579 次 |
| 最近记录: |