首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不运行gcloud启动脚本

不运行gcloud启动脚本
EN

Stack Overflow用户
提问于 2017-06-06 12:12:30
回答 1查看 1.8K关注 0票数 0

我有以下python代码:

代码语言:javascript
复制
def create_instance(compute_arg, project_arg, zone_arg, config="default", startup_script="", name="", instances=[],
                    strategy_args=[]):

    startup_script = """
    #! /bin/bash\n
    mkdir before_all;\n
    EOF
    """

    print name
    if config == "default":
        print 'config is default'
        config = {
            "name": name,
            "zone": "projects/my-project-12345/zones/us-east1-b",
            "machineType": "projects/my-project-12345/zones/us-east1-b/machineTypes/n1-standard-1",
            "metadata": {
                "items": [{'key': 'startup-script', 'value': startup_script}]
            },
            "tags": {
                "items": [
                    "http-server",
                    "https-server"
                ]
            },
            "disks": [
                {
                    "type": "PERSISTENT",
                    "boot": True,
                    "mode": "READ_WRITE",
                    "autoDelete": True,
                    "deviceName": "instance-6",
                    "initializeParams": {
                        "sourceImage": "projects/my-project-12345/global/images/image-root-git-algo",
                        "diskType": "projects/my-project-12345/zones/us-east1-b/diskTypes/pd-standard",
                        "diskSizeGb": "10"
                    }
                }
            ],
            "canIpForward": False,
            "networkInterfaces": [
                {
                    "network": "projects/my-project-12345/global/networks/default",
                    "subnetwork": "projects/my-project-12345/regions/us-east1/subnetworks/default",
                    "accessConfigs": [
                        {
                            "name": "External NAT",
                            "type": "ONE_TO_ONE_NAT"
                        }
                    ]
                }
            ],
            "description": "",
            "labels": {},
            "scheduling": {
                "preemptible": False,
                "onHostMaintenance": "MIGRATE",
                "automaticRestart": True
            },
            "serviceAccounts": [
                {
                    "email": "123456-compute@developer.gserviceaccount.com",
                    "scopes": [
                        "https://www.googleapis.com/auth/cloud-platform"
                    ]
                }
            ]
        }

    return compute_arg.instances().insert(
        project=project_arg,
        zone=zone_arg,
        body=config).execute()

compute = googleapiclient.discovery.build('compute', 'v1') 
project = 'my-project-12345'
zone = 'us-east1-b'
instance_name = 'instance-algo-' + str(uuid.uuid4())
operation = create_instance(compute, project, zone, name=instance_name, instances=[])

没有问题。我的实例是基于正确的图像创建的,我能够发现所有文件和目录。

这很好,但是我的启动脚本没有运行。当我登录到我的实例时,我看不到dir before_all。如果我深入到实例中,我可以运行mkdir before_all;,它可以愉快地运行。

我以前有一个更复杂的启动脚本,它没有运行,也没有进行简化,看我上面有什么。

我不知道为什么格式看起来与这个来自google的例子中的内容相匹配。

有人看到我在这里做错了什么吗?

请注意,我已经尝试过与和不使用EOF,有和没有分号,和带和不带\n。挠我的头。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2017-08-27 00:37:13

  1. 你不应该有"\n“或"EOF”。无论您在哪里得到它们,它们都只是尝试在shell脚本中执行相当于"""..."""的操作。
  2. 您也不应该在#!之前有任何前导空间,因为这会导致它被忽略。目前,您有一个新的行和几个空格在它前面。尝试: “#/bin/bash.” 不过,我不认为这是问题的原因,因为在默认情况下,文件中的所有命令无论如何都会运行。
  3. 因为您指定了mkdir的相对路径,所以它将在启动脚本运行的地方创建目录。这是一个与您登录时(主目录)不同的位置。如果您修复(1)和(2),您会发现before_all是在某个令人惊讶的地方创建的(可能是在/中)。如果希望mkdir在主目录中创建目录,请尝试使用mkdir /home/YOUR_USERNAME/before_all。但是,请注意,它将由root而不是您自己的用户拥有。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44389699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档