有一种方法可以设置EC2计算机在启动时执行KAFKA启动脚本吗?我还使用Java AWS SDK,因此我接受了在EC2实例上运行命令的程序Java和bash脚本模式的解决方案,该模式在启动时运行kafka脚本。
可以在用户数据属性中传递脚本。
如果您使用的是Amazon Linux AMI,并且脚本的第一行以#!
开头,则该脚本将执行第一次启动实例。
有关详细信息,请参见:在Linux实例上运行命令
在用户数据下添加脚本在云形式中仅运行一次,就在启动实例时,而不是重新启动实例时,这是我的需要的用例。我使用上面和此处注释的 rc.local 方法。以下实际上将我的脚本附加到rc.local
文件并按预期执行:
Resources:
VM:
Type: 'AWS::EC2::Instance'
Properties:
[...]
UserData:
'Fn::Base64': !Sub |
#!/bin/bash -x
echo 'INSTANCEID="$(curl -s http://169.254.169.254/latest/meta-data/instance-id)"' >> /etc/rc.local
#echo 'INSTANCEID=$(ls /var/lib/cloud/instances)' >> /etc/rc.local
echo 'echo "aws ec2 stop-instances --instance-ids $INSTANCEID --region ${AWS::Region}" | at now + ${Lifetime} minutes' >> /etc/rc.local
附加提示:您可以通过按照以下说明进行AWS控制台检查用户数据(当前脚本(,并使用AWS控制台进行修改:查看和更新实例用户数据。
ec2实例的OS是什么?
-
您可以在启动时间使用UserData脚本。请记住,这只是1个活动
-
如果您的要求是每次重新启动EC2实例时启动脚本,则可以在OS启动时间加载的Linux实例上使用
rc.local
文件。
rc.local对我不起作用。
我使用了本指南之后的crontab,该指南设置了一个可以在启动时运行脚本的cron作业。
https://phoenixnap.com/kb/crontab-reboot
本质上是
crontab -e
<select editor>
@reboot <script to run>
如果您正在运行Windows EC2,则需要阅读:https://docs.aws.amazon.com/awsec2/latest/windowsguide/ec2-windows-user-data.html
示例:
<script>
echo Current date and time >> %SystemRoot%Temptest.log
echo %DATE% %TIME% >> %SystemRoot%Temptest.log
</script>