【问题标题】:Is it possible to concurrently run commands in cloud-init是否可以在 cloud-init 中同时运行命令
【发布时间】:2021-05-15 15:11:25
【问题描述】:

作为我的 cloud-init 的一部分,我需要下载一个大文件(即 6GB 工具链/SDK)。这一步通过runcmd执行,耗时3-5分钟,大约是初始化过程的一半时间。

是否可以至少提前在后台开始下载(即作为bootcmd 的一部分)并继续进行其余的初始化(即apt-get install ...)?

【问题讨论】:

    标签: cloud-init


    【解决方案1】:

    是的,这当然是可能的。例如,给定以下云配置:

    #cloud-config
    bootcmd:
     - echo 'Starting foreground sleep' >> /var/tmp/log
     - date +%s >> /var/tmp/log
     - sleep 5
     - date +%s >> /var/tmp/log
    
     - echo 'Starting background sleep' >> /var/tmp/log
     - date +%s >> /var/tmp/log
     - sleep 10 &
     - date +%s >> /var/tmp/log
    

    我得到这样的结果:

    cat /var/tmp/log
    Starting foreground sleep
    1613538543
    1613538548
    Starting background sleep
    1613538548
    1613538548
    

    增加后台睡眠对 cloud-init 完成所需的时间没有影响。背景wget 应该类似地工作。

    也就是说,这并不是bootcmd 的真正用途。如果您检查cloud-init docs,它指定bootcmd should only be used for things that could not be done later in the boot process。在bootcmd 运行之后,一些相当大的设置任务(包括磁盘设置)仍然可能发生,因此在启动早期开始一些大型下载可能不是一个明智的选择。

    runcmd 模块应该在任何 apt 安装之前运行。您可以在您的云实例上使用cloud-init analyze show 进行验证。除非你有充分的理由使用bootcmd,否则你应该坚持使用runcmd

    【讨论】:

      猜你喜欢
      • 2019-08-04
      • 2018-09-28
      • 1970-01-01
      • 1970-01-01
      • 2014-05-30
      • 1970-01-01
      • 2022-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多