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

13

有一种方法可以设置EC2机器在启动时执行Kafka启动脚本吗?我还使用Java Aws SDK,因此我接受两种解决方案:一个是在EC2实例上运行命令的Java程序解决方案,另一个是在启动时运行kafka脚本的bash脚本模式解决方案。

5个回答

8

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

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

详情请参见:在启动时在 Linux 实例上运行命令


8
在CloudFormation的下添加脚本只在实例启动时运行一次,而不是在实例重新启动时运行,这正是我需要的用例。 我使用上面和这里评论中提到的方法。以下内容实际上将我的脚本附加到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控制台检查用户数据(当前脚本)并进行修改:查看和更新实例用户数据


4

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

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

  2. 如果您的需求是每次重新启动EC2实例时都要启动脚本,则可以使用Linux实例上在操作系统启动时加载的rc.local文件。


我正在使用Ubuntu服务器16.04。我需要在免费的EC2实例启动时启动Zookeeper和Kafka。 - andrea cenciarelli
在实例启动时利用用户数据脚本。 - user9575749

4

rc.local对我没用。

我使用了这篇指南中的crontab,它设置了一个可以在启动时运行脚本的cron job。

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

基本上就是这样。

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

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接