Terraform部署VM时cloud-init多部分用户数据仅第一部分执行问题求助
解决cloud-init多部分配置中shell脚本未执行的问题
从你提供的cloud-init.log错误信息里,一眼就能找到问题所在:
Exec format error. Missing #! in script?
问题原因
Linux系统下,要让shell脚本能够被直接执行,必须在脚本的第一行添加shebang(#!)声明,用来指定脚本的解释器(比如bash)。你的init.sh只有一行设置主机名的命令,没有这个开头声明,cloud-init尝试运行它的时候就会抛出"Exec format error"的错误。
修复方案
修改你的init.sh脚本,在最顶部加上shebang行即可,修改后的脚本内容如下:
#!/bin/bash hostnamectl set-hostname testconfig
额外排查点(如果问题仍存在)
如果修改后还是无法执行,可以检查这两个细节:
- 脚本的换行符格式:确保是Unix风格的LF,而不是Windows的CRLF(Windows格式的换行可能会导致解释器识别失败)
- 脚本权限:虽然cloud-init会自动为脚本添加可执行权限,但如果是手动上传脚本的话,要确保它有执行权限(执行
chmod +x init.sh)
验证方法
重新运行terraform apply后,登录目标VM,执行hostname命令,应该能看到主机名已经变成testconfig。同时查看/var/log/cloud-init.log,会看到脚本成功执行的日志,不会再出现之前的错误。
内容的提问来源于stack exchange,提问作者zaidwaqi
相关产品推荐
相关产品推荐

