Google Cloud Compute Engine启动脚本失败:wget及解压文件未生成
解决GCE启动脚本中文件下载与解压失败的问题
我来帮你排查下问题所在,你的启动脚本里有几个容易踩坑的地方,还有一个极易被忽略的执行环境细节:
1. Wget命令参数错误
你原来的wget写法不符合语法规范:
wget [DOMAIN]/file.tar.gz ~/file.tar.gz
Wget中如果要指定文件保存路径/名称,必须用-O参数,否则它会把第二个参数当成另一个待下载的URL,直接导致下载失败。正确写法应该是:
wget [DOMAIN]/file.tar.gz -O ~/file.tar.gz
2. Tar解压命令的路径参数错误
你的tar命令也存在参数逻辑问题:
tar -vzxf ~/file.tar.gz ~/
直接把~/放在命令末尾,tar会把解压内容放到当前目录下名为~/的子目录里,而非你预期的主目录。要指定解压到主目录,需要用-C参数明确目标路径:
tar -vzxf ~/file.tar.gz -C ~/
3. 启动脚本的执行用户(最关键的隐藏问题!)
GCE的启动脚本默认是以root用户身份执行的,所以这里的~/对应的是root的主目录/root/,而非你登录的普通用户主目录(比如/home/your-username/)。这就是为什么你登录普通用户后完全看不到文件的核心原因!
修正后的完整启动脚本
如果要把文件下载到你的普通用户(比如用户名是luke)主目录,建议用绝对路径明确指定,同时修正权限:
sudo apt-get update -y sudo apt-get install python3-pip -y sudo pip3 install pymysql sympy # 替换成你的实际用户名 USERNAME="luke" TARGET_DIR="/home/${USERNAME}" FILE_PATH="${TARGET_DIR}/file.tar.gz" # 下载文件并修正所属用户 wget [DOMAIN]/file.tar.gz -O ${FILE_PATH} chown ${USERNAME}:${USERNAME} ${FILE_PATH} # 解压到目标目录 tar -vzxf ${FILE_PATH} -C ${TARGET_DIR}
快速验证方法
你可以登录实例后切换到root用户,看看文件是不是跑到root目录里了:
sudo su - ls /root/
如果能看到相关文件,就坐实了是执行用户环境导致的问题。
内容的提问来源于stack exchange,提问作者Luke Richards
相关产品推荐
相关产品推荐

