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

Google Cloud启动脚本未按预期运行求助:手动执行正常

排查Google Cloud启动脚本未执行的问题

我来帮你一步步定位这个问题,结合你描述的情况,咱们从几个关键方向入手:

1. 先检查脚本本身的基础配置

  • 必须加Shebang:脚本开头一定要写#!/bin/bash或者#!/bin/sh,这是系统识别脚本解释器的核心,没有这一行系统可能不知道该用什么程序去执行脚本。
  • 确保脚本可访问:虽然你说SSH执行没问题,但要确认GCS桶里的脚本权限是否允许实例读取。可以用这条命令给脚本添加公共读权限(测试用,之后可以再调整):
    gsutil acl ch u:allUsers:R gs://bucket-name/start-script.sh
    

2. 验证元数据的配置细节

  • 检查路径拼写:GCS的桶名和文件名是区分大小写的,仔细核对startup-script-url里的gs://bucket-name/start-script.sh有没有写错字符、大小写错误。
  • 直接命令的输出问题:你用startup-script执行echo "hello"时,默认输出只会到启动脚本的日志里,不会在终端显示。建议改成输出到文件验证:
    startup-script: echo "hello" >> /tmp/startup-test.log
    
    重启实例后SSH进去查看/tmp/startup-test.log是否存在。

3. 查看启动脚本的执行日志(最关键)

Google Cloud会把启动脚本的执行过程记录下来,直接看日志就能找到问题:

  • 通过Cloud Console查看:打开实例详情页,切换到「日志」标签,搜索startup-script关键词,能看到脚本的执行步骤和错误信息。
  • 通过命令行看串口输出:
    gcloud compute instances get-serial-port-output 你的实例名 --zone 你的实例区域
    
  • 实例本地日志:SSH登录后查看/var/log/startupscript.log(Debian/Ubuntu系统)或者/var/log/messages(RHEL/CentOS系统),里面会详细记录脚本执行的每一步,包括报错。

4. 确认实例服务账号的权限

虽然你开启了完整Cloud API访问范围,但还是要确认实例的服务账号是否有读取GCS对象的权限:

  • 打开实例详情页,查看「服务账号」字段,找到对应的账号。
  • 进入IAM页面,检查该账号是否拥有Storage Object Viewer角色,或者直接有storage.objects.get权限。

5. 用极简脚本做测试

先上传一个最简单的脚本到GCS,排除复杂脚本内容的干扰:

#!/bin/bash
echo "启动脚本执行成功!时间:$(date)" >> /tmp/startup-success.log

配置startup-script-url指向这个脚本,重启实例后查看/tmp/startup-success.log是否生成——如果这个能成功,就说明问题出在原脚本的内容上;如果还是失败,就继续排查元数据或权限问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:15:11