AWS EC2实例上的触发事件停止/终止

时间:2016-04-19 20:51:13

标签: bash amazon-web-services amazon-s3 centos aws-cli

当EC2实例停止/终止时,是否有某种方法可以触发事件(例如,运行脚本将某些日志推送到S3)?

我已经考虑过使用/ usr / lib / systemd / system中的服务来触发脚本,但我还没有运气。我听说实例上的网络功能可以在触发服务之前关闭,如果是,则可能是脚本未正确执行的原因。

2 个答案:

答案 0 :(得分:1)

所以答案并不是特定于AWS的,但它现在对我有效(在EC2实例停止和终止时测试)。

  1. 我创建了一个system.d服务文件:
  2. /usr/lib/systemd/system/my_shutdown.service

    [Unit]
    Description=my_shutdown Service
    Before=shutdown.target reboot.target halt.target
    Requires=network-online.target network.target
    
    [Service]
    KillMode=none
    ExecStart=/bin/true
    ExecStop=/path/to/my_script.sh
    RemainAfterExit=yes
    Type=oneshot
    
    [Install]
    WantedBy=multi-user.target
    
    1. 将此服务添加到multi-user.target:
    2. systemctl enable my_shutdown.service

      或者,您可以手动创建符号链接:

      ln -s /usr/lib/systemd/system/my_shutdown.service /etc/systemd/system/multi-user.target.wants/my_shutdown.service

      1. 启动服务并通过停止/终止实例进行测试。
      2. systemctl start my_shutdown.service

        我的理解:

        • 描述:我们服务的描述。
        • 之前:我们希望我们的服务在这些目标启动之前停止。
        • 要求:我们的服务要求网络功能可用。在我们的服务开始/停止之前,不得停止这些目标。
        • KillMode:无;不要杀死我们的过程。
        • ExecStart:/ bin / true;一个只能返回成功的命令。服务何时开始运行。
        • ExecStop:要运行的脚本。服务何时停止运行。
        • RemainAfterExit:即使退出所有进程,也要认为我们的服务处于活动状态。
        • 类型:oneshot;预计该过程必须在systemd启动后续单元之前退出。
        • WantedBy:我们想要添加服务的目标。

        参考文献:

        1. https://www.freedesktop.org/software/systemd/man/systemd.service.html
        2. https://www.freedesktop.org/software/systemd/man/systemd.kill.html#
        3. https://www.freedesktop.org/software/systemd/man/systemd.special.html
        4. https://www.freedesktop.org/software/systemd/man/systemd.target.html

答案 1 :(得分:0)

您可以使用CloudWatch触发事件,例如在特定事件上将日志推送到S3 ...在此处了解详情:https://aws.amazon.com/cloudwatch/