作为我的cloud-init的一部分,我需要下载一个大文件(即.6 6GB工具链/ SDK)。此步骤通过runcmd
执行,耗时3-5分钟,约为初始化过程时间的一半。
是否有可能至少在后台提前开始下载(即作为bootcmd
的一部分),并继续进行其余的初始化(即apt-get install ...
)?
发布于 2021-02-17 13:27:48
是的,这当然是有可能的。例如,给定以下cloud-config:
#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
。
https://stackoverflow.com/questions/66162172
复制相似问题