我开始使用 Packer,我有一个问题。是否有任何解决方案可以添加一个 bash 脚本,该脚本将在从映像部署 VM 后自动启动一次?
问问题
1612 次
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####
解释:
- rc.local 脚本在每次系统启动后执行。因此,在那里添加代码将导致它在启动后执行。
- 使用 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 回答