4

我开始使用 Packer,我有一个问题。是否有任何解决方案可以添加一个 bash 脚本,该脚本将在从映像部署 VM 后自动启动一次?

4

2 回答 2

5

/etc/rc.local在 linux VM 的镜像中添加以下代码:

####Marker_start####
sed -i '/####Marker_start####/,/####Marker_end####/d' /etc/rc.local
#Your custom code here
####Marker_end####

解释:

  1. rc.local 脚本在每次系统启动后执行。因此,在那里添加代码将导致它在启动后执行。
  2. 使用 sed 在脚本第一次执行时删除自定义代码。因此,代码只执行一次。

其他方法:

创建一个包含您的自定义代码的脚本并将下面的代码附加到它。

 chmod 644 "$0"

& 创建一个符号链接

ln -s /path/to/your-script.sh /etc/rc5.d/S99my-custom-script.sh

(假设您的默认运行级别是 5。在您的 VM 发行版上根据需要更改它 - 例如 ubuntu 有它/etc/rc2.d
说明:当进入运行级别 5 时,
命名的脚本会自动执行,参数 = 。在第一次执行时,将脚本设为不可执行,以便它只执行一次。/etc/rc5.d/S*start

于 2014-04-25T11:54:09.807 回答
0

我在这里问过同样的问题,但针对更具体的情况。我正在基于该aws linux图像为 AWS 构建一个自定义 AMI。

如果您有这种情况,您可以将脚本添加到/var/lib/cloud/per-instance. 这将为每个实例运行一次脚本。如果您需要它在每次启动时运行,您可以将其添加到/var/lib/cloud/per-boot.

确保首先将文件夹复制到可以写入的位置,/home/ec2-user/然后将脚本移动到该位置。

有关此案例的更具体问题,请参阅AWS user_data with Packer

于 2018-04-18T14:05:07.453 回答