簡體   English   中英

AWS EC2 實例停止/終止上的觸發事件

[英]Trigger event on AWS EC2 instance stop/terminate

當 EC2 實例停止/終止時,是否有某種方法可以觸發事件(例如,運行腳本將一些日志推送到 S3)?

我已經研究過使用 /usr/lib/systemd/system 中的服務觸發腳本,但我還沒有運氣。 我聽說可以在觸發服務之前關閉實例上的網絡功能,如果為真,這可能是腳本無法正確執行的原因。

所以答案並不是真正特定於 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
  1. 將此服務添加到 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

  1. 啟動服務並通過停止/終止實例進行測試。

systemctl start my_shutdown.service

我的理解:

  • 描述:對我們服務的描述。
  • 之前:我們希望我們的服務在這些目標啟動之前停止。
  • 要求:我們的服務要求網絡功能可用。 在我們的服務啟動/停止之前,不得停止這些目標。
  • 殺戮模式:無; 不要殺死我們的進程。
  • 執行開始:/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

您可以使用 CloudWatch 觸發事件,例如在特定事件上將日志推送到 S3……在此處了解更多信息: https ://aws.amazon.com/cloudwatch/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM