如何通过GCP启动脚本在Ubuntu16.04实例创建时于主目录生成文件夹?
问题分析与解决
核心原因
GCP虚拟机的启动脚本默认以root用户身份执行,你脚本里的~/test实际是在root的主目录(/root/test)下创建文件夹,而非你登录后使用的普通用户主目录,所以登录后看不到该文件夹。另外你没找到相关日志记录,是因为启动脚本的日志默认存在/var/log/startupscript.log,并非你之前查看的日志位置。
解决方法
方法1:直接指定普通用户主目录的绝对路径
假设你使用的是GCP默认镜像的普通用户(比如ubuntu),修改启动脚本为:
#!/bin/bash mkdir -p /home/ubuntu/test
方法2:切换到目标用户执行命令
通过su命令切换到普通用户后再创建文件夹,确保路径和权限匹配:
#!/bin/bash su - ubuntu -c "mkdir -p ~/test"
方法3:指定启动脚本的执行用户
创建实例时添加--metadata startup-script-user=ubuntu参数,让启动脚本直接以目标普通用户身份执行,此时~/就会指向该用户的主目录:
gcloud compute instances create example-instance \ --image-family $image \ --image-project $projectID \ --machine-type $type_machine \ --metadata startup-script='#!/bin/bash mkdir -p ~/test' \ --metadata startup-script-user=ubuntu
验证步骤
- 查看启动脚本的执行日志,确认操作是否成功:
cat /var/log/startupscript.log
- 登录实例后,前往对应目录检查文件夹是否存在。
内容的提问来源于stack exchange,提问作者learning
相关产品推荐
相关产品推荐

