2016-04-19 142 views
0

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

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

回答

0

所以答案是不是真的AWS具体,但它现在是为我工作(在EC2实例停止和终止测试)。

  1. 我已经创建了一个system.d服务文件:

/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 
  • 添加此服务multi-user.target:
  • systemctl enable my_shutdown.service

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

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

  • 发起者服务和通过停止/终止实例进行测试。
  • systemctl start my_shutdown.service

    我的理解:

    • 说明:我们的服务的描述。
    • 之前:我们希望我们的服务在这些目标开始前停止。
    • 要求:我们的服务要求网络功能可用。在我们的服务开始/停止之前,这些目标不得停止。
    • KillMode:none;不要杀死我们的过程。
    • 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
    0

    您可以触发事件,如推日志S3上的特定事件,CloudWatch的......这里了解更多:https://aws.amazon.com/cloudwatch/

    +1

    更深连结[CloudWatch的EC2活动](http://docs.aws。 amazon.com/AmazonCloudWatch/latest/DeveloperGuide/EventTypes.ht ml#ec2_event_type)可能会有帮助,在这里。但是,一旦某个实例开始关闭,考虑尝试保留日志或导出任何内容可能会有点晚。系统通过模拟短按电源按钮来停止实例。自动扩展组具有可中断的状态更改,而实例实例有2分钟的警告,但对于其他实例,关闭时的自主内部清除操作可能不切实际。 –

    +0

    采取点,迈克尔 - sqlbot。感谢更深层次的联系。 – hephalump