AWS EC2在启动时运行脚本程序



有一种方法可以设置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是什么?

  1. 您可以在启动时间使用UserData脚本。请记住,这只是1个活动

  2. 如果您的要求是每次重新启动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>

最新更新