aws ec2 运行 启动时的脚本程序

Aws Ec2 run script program at startup

有没有设置EC2机器在启动时执行Kafka启动脚本的方法? 我也使用 java Aws SDK,所以我接受了 java 程序的解决方案 运行 在 EC2 实例上的命令和 bash 脚本模式的解决方案 运行 启动时的kafka脚本。

可以在 用户数据 属性.

中传递脚本

如果您使用的是 Amazon Linux AMI,并且脚本的第一行以 #! 开头,那么脚本将在实例第一次 时执行已开始.

详情见:Running Commands on Your Linux Instance at Launch

EC2实例的OS是什么?

  1. 您可以在实例启动时使用用户数据脚本。请记住这只是 1 次 activity

  2. 如果您的要求是在每次重启 EC2 实例时启动脚本,那么您可以在 Linux 个实例上使用 rc.local 文件,该文件加载于 OS开机时间。

如果您是 运行 windows EC2,您需要阅读:https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-windows-user-data.html

示例:

<script>
echo Current date and time >> %SystemRoot%\Temp\test.log
echo %DATE% %TIME% >> %SystemRoot%\Temp\test.log
</script>

在 CloudFormation 中的 User Data 下添加脚本仅运行一次,即在实例启动时运行,而不是在实例重新启动时运行,这正是我的用例所需要的。我使用上面评论的 rc.local 方法和 here。以下实际上将我的脚本附加到 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 控制台对其进行修改:View and update the instance user data.

rc.local 对我不起作用。

我按照本指南使用了 crontab,它设置了一个可以在启动时 运行 脚本的 cron 作业。

https://phoenixnap.com/kb/crontab-reboot

本质上是

crontab -e
<select editor>
@reboot <script to run>