You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCE启动脚本在Ubuntu 18.04实例上无法运行求助

解决GCP Ubuntu 18.04实例启动脚本不运行的思路

我之前也碰到过类似的糟心事,给你梳理几个实用的排查方向,应该能找到问题根源:

1. 先确认metadata的键名是否正确

GCP Linux实例的启动脚本URL必须用特定的metadata键:startup-script-url,别写成下划线分隔或者其他拼写错误!
你可以用命令验证键名和值是否匹配:

gcloud compute instances describe [INSTANCE_NAME] --zone [ZONE] | grep -A2 startup-script-url

确保输出里的键名完全是startup-script-url,值是你的存储桶完整URL(比如gs://your-bucket/script.sh)

2. 检查存储桶的访问权限

虽然你手动下载能运行,但启动脚本是用实例默认服务账号(格式是[PROJECT-NUMBER]-compute@developer.gserviceaccount.com)来拉取的,这个账号可能没有存储桶的读取权限:

  • 给服务账号添加存储桶的storage.objectViewer角色:
    gsutil iam ch serviceAccount:[PROJECT-NUMBER]-compute@developer.gserviceaccount.com:objectViewer gs://your-bucket
    
  • 如果是测试用,也可以临时把存储桶设为公开可读(但生产环境千万别这么做)

3. 查看专门的启动脚本日志

Ubuntu 18.04的GCP启动脚本日志不在常规的syslog里,得找专门的日志文件:

  • 查看启动脚本的执行细节:
    cat /var/log/google-startup-scripts.log
    
    这里面会记录脚本下载、执行的全流程,哪怕没有明显“错误”,也可能藏着警告(比如脚本语法问题、依赖缺失)
  • 另外可以看/var/log/cloud-init.log,cloud-init负责处理metadata脚本,里面有更多初始化过程的细节

4. 检查脚本本身的格式问题

脚本自身的小问题也会导致无法执行:

  • 确保脚本开头有正确的shebang,比如#!/bin/bash或者#!/usr/bin/env bash,没有的话系统不知道用什么解释器运行
  • 检查脚本下载后的权限:cloud-init默认会给脚本加执行权限,但可以手动确认:
    ls -l /var/lib/google/scripts/startup-script  # 这是脚本下载后的默认路径
    
    如果没有执行权限,试试手动加chmod +x再测试

5. 升级cloud-init版本

Ubuntu 18.04自带的cloud-init版本可能比较老,存在一些metadata处理的bug:

  • 查看当前版本:
    cloud-init --version
    
  • 如果版本低于0.9.10,建议升级后重启实例测试:
    sudo apt update && sudo apt install --only-upgrade cloud-init
    

6. 用极简脚本做测试

如果上面都没问题,先写个极简测试脚本放到存储桶里,比如:

#!/bin/bash
echo "Startup script ran at $(date)" >> /tmp/test-startup.log

用这个脚本的URL设置metadata,重启后检查/tmp/test-startup.log是否生成,排除脚本复杂逻辑导致的问题


内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:38:00