Google cloud platform Google云启动脚本未运行

Google cloud platform Google云启动脚本未运行,google-cloud-platform,google-compute-engine,Google Cloud Platform,Google Compute Engine,启动脚本的运行方式与我预期的不同 我在存储桶中有一个.sh文件,并包含了一个启动脚本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

启动脚本的运行方式与我预期的不同

我在存储桶中有一个
.sh
文件,并包含了一个
启动脚本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
以下脚本未按预期执行。我尝试使用
启动脚本
元数据标记,并使用类似
echo“hello”
这样的简单方法,但这也不起作用。我启用了完整的云API访问范围

如果我复制下面文件的内容并将其粘贴到ssh终端中,它就可以正常工作

真的需要帮助吗

开始脚本.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
#/bin/bash
image\u name=gcr.io/某些映像:版本2
docker\u images=$(docker inspect--type=image$image\u name)
数组_计数=${#docker_图像[0]}
#检查docker映像是否可用
而((数组_计数=2));
做
docker\u images=$(docker inspect--type=image${image\u name})
数组_计数=${#docker_图像[0]}
如果($array_count>2));然后
打破
fi
完成
################################
#
#Docker图像现在被注入
#通过谷歌计算引擎
#
################################
echo“docker图像${image\u name}可用”
容器ID=($(docker容器ls | grep${image_name}| awk'{print$1}'))
对于((i=0;i<${容器ID[@]};i++);
做
#为每个容器运行命令
container_id=${container_id[i]}
echo“为容器运行命令:${container\u id[i]}”
#启动云sql代理
docker容器运行-d-p$HOST\u PORT:$APPLICATION\u PORT\
${container_id[i]}\
./cloud\u sql\u代理\
-实例=$PG\U实例\U连接\U名称=tcp:$PG\U端口\
-凭证\文件=$PG\凭证\文件\位置
#HTTP-启动unicorn Web服务器
docker exec-d\
${container_id[i]}\
bundle exec unicorn-c config/unicorn.rb
完成

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


使用“将容器映像部署到此VM实例”选项时,启动脚本始终运行

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

您可以使用cmd
sudogoogle\u metadata\u script\u runner-d——脚本类型startup
调试脚本


doc:

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

启动脚本始终运行正常。请在下面找到我的答案。