簡體   English   中英

如何僅在 AWS AutoScaling 中的單個實例上運行 cron 作業?

[英]How to run cron job only on single instance in AWS AutoScaling?

我為我的應用程序安排了 2 個 cronjobs。

我的應用程序服務器在一個自動縮放組中,由於高可用性,我至少保留了 2 個實例。 一切正常,但由於自動縮放中有 2 個實例,cron 作業正在運行多次。

我不能將實例大小限制為 1,因為我的應用程序已經在生產環境中,我更喜歡 HA。

我應該如何限制在單個實例上執行 cron 作業? 還是我必須使用其他服務,例如 AWS Lamda 或 AWS ElasticBeanstalk

首先,您應該考慮在這些實例上運行 crons 是否合適。 如果你試圖保持這個高度可用並且它是通過客戶直接交互的,那么 crons 性能的影響是什么?

也許考慮使用一個單獨的自動縮放組或實例,總共有 1 個實例來運行這些 crons? 您可以在 cron 需要運行之前啟動實例或更新自動縮放組,然后在完成后自動關閉。

否則,您將需要考慮為您的腳本使用鎖定機制。 通過使用這個你的腳本寫一個鎖來確認它正在處理中,在腳本運行的開始它會檢查是否有任何腳本鎖在進行中。 為了進一步防止多個服務器之間發生沖突的可能性,請考慮在腳本的開頭添加抖動(隨機睡眠秒數)。

適合編寫鎖的技術如下:

您可以對實例啟用終止保護。 為系統管理員附加必要的角色和權限。 一旦實例在系統管理器下的托管實例下可用,您就可以在 cloudwatch 中創建計划事件來運行 ssm 文檔。 如果您正在運行 bash 腳本,請將其轉換為 ssm 文檔並將此文檔設置為 targate。 或者您可以使用 shellscript 文檔來運行命令

暫無
暫無

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

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