Aws Ec2在启动时运行脚本程序

时间:2018-04-01 03:01:55

标签: bash amazon-web-services amazon-ec2 startup

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

4 个答案:

答案 0 :(得分:2)

可以在用户数据属性中传递脚本。

如果您使用的是Amazon Linux AMI,并且脚本的第一行以#!开头,则脚本将在第一次启动实例时执行。< / p>

有关详细信息,请参阅:Running Commands on Your Linux Instance at Launch

答案 1 :(得分:1)

EC2实例的操作系统是什么?

  1. 您可以在实例启动时使用userdata脚本。请记住,这只是一次性活动

  2. 如果您需要每次重启EC2实例时启动脚本,那么您可以在操作系统启动时加载的Linux实例上使用public String toString() { String output = matrixOne.toString().replace("[", "").replace("]", ""); return output; } 文件。

答案 2 :(得分:0)

如果您正在运行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>

答案 3 :(得分:0)

在CloudFormation中的 User Data 下添加脚本仅运行一次,恰好在启动实例时执行,而在重启实例时不执行,这是我的用例所需要的。我使用了上面和here所评论的 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控制台检查用户数据(当前脚本)并对其进行修改:View and update the instance user data