2016-04-19 139 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