【问题标题】:Google Cloud Startup Script Not Running谷歌云启动脚本未运行
【发布时间】:2021-11-09 11:47:04
【问题描述】:

启动脚本的行为与我预期的不同。

我在存储桶中有一个.sh 文件,并包含一个startup-script-url 元标记,其值为gs://bucket-name/start-script.sh

[[0;32m  OK  [0m] Started Google Compute Engine Accounts Daemon.
         Starting Google Compute Engine Startup Scripts...
[[0;32m  OK  [0m] Started Google Compute Engine Shutdown Scripts.
[[0;32m  OK  [0m] Started Google Compute Engine Startup Scripts.
[[0;32m  OK  [0m] Started Docker Application Container Engine.
[[0;32m  OK  [0m] Started Wait for Google Container Registry (GCR) to be accessible.
[[0;32m  OK  [0m] Reached target Google Container Registry (GCR) is Online.
[[0;32m  OK  [0m] Started Containers on GCE Setup.
[    8.001248] konlet-startup[1018]: 2018/03/08 20:23:56 Starting Konlet container startup agent

以下脚本未按预期执行。我尝试使用startup-script 元数据标签并使用像echo "hello" 这样简单的东西,但这也不起作用。我已启用完整的 Cloud API 访问范围。

如果我复制以下文件的内容并将其粘贴到 ssh 终端,它可以完美运行。

真的需要一些帮助=D

start-script.sh

#! /bin/bash

image_name=gcr.io/some-image:version-2
docker_images=$(docker inspect --type=image $image_name)
array_count=${#docker_images[0]}

# Check if docker image is available
while ((array_count = 2));
do
    docker_images=$(docker inspect --type=image ${image_name})
    array_count=${#docker_images[0]}

    if (($array_count > 2)); then
        break
    fi
done

################################
#
#   Docker image now injected
#   by google compute engine
#
################################

echo "docker image ${image_name} available"

container_ids=($(docker container ls | grep ${image_name} | awk '{ print $1}'))

for (( i=0; i < ${#container_ids[@]}; i++ ));
do
    # run command for each container
    container_id=${container_ids[i]}
    echo "running commands for container: ${container_ids[i]}"

    # start cloud sql proxy
    docker container run -d -p $HOST_PORT:$APPLICATION_PORT \
    ${container_ids[i]} \
    ./cloud_sql_proxy \
    -instances=$PG_INSTANCE_CONNECTION_NAME=tcp:$PG_PORT \
    -credential_file=$PG_CREDENTIAL_FILE_LOCATION

    # HTTP - Start unicorn webserver
    docker exec -d \
    ${container_ids[i]} \
    bundle exec unicorn -c config/unicorn.rb
done

【问题讨论】:

    标签: google-cloud-platform google-compute-engine


    【解决方案1】:

    好的...经过一些场景测试...发现启动脚本如果您使用“将容器映像部署到此 VM 实例”选项则不会运行。希望这可以帮助您避免扯掉你的头发哈哈。

    【讨论】:

    • 启动脚本总是运行正常。请在下面找到我的答案。
    【解决方案2】:

    startup-script 在使用“将容器映像部署到此 VM 实例”选项时始终运行。

    您可以使用 cmd sudo journalctl -u google-startup-scripts.service -f检查脚本运行结果

    您可以使用 cmd sudo google_metadata_script_runner -d --script-type startup调试脚本

    2021.11.09 更新:sudo google_metadata_script_runner startup

    文档:https://cloud.google.com/compute/docs/instances/startup-scripts

    【讨论】:

      【解决方案3】:

      在从 /tmp 删除文件的执行权限后,我遇到了类似的问题。考虑到启动脚本被复制到 /tmp/ 然后从那里运行。

      【讨论】:

        最近更新 更多