[英]How to execute a bash script task in a single machine of an AWS autoscaling group?
最近,我遇到一種情況,我需要確保自動縮放組中只有一台計算機以bash腳本執行給定任務,而bash腳本經常由所有這些計算機運行。
簡而言之,我需要某種形式的領導人選舉,以避免兩台機器執行相同的任務以適應新機器的啟動和停止。
我最終實現了可以做兩件事的事情:
比較兩者以找出是否運行任務。
#!/bin/bash AUTOSCALING_GROUP="mygroup" die() { status=$1; shift; echo "FATAL: $*"; exit $status; } THIS_INSTANCE_ID="`wget -q -O - http://169.254.169.254/latest/meta-data/instance-id || die \\"wget instance-id has failed: $?\\"`" LEADER_INSTANCE_ID="`aws --region us-east-1 ec2 describe-instances --filters "Name=tag:aws:autoscaling:groupName,Values=$AUTOSCALING_GROUP" "Name=instance-state-name,Values=running" | grep -o '\\"i-[0-9a-f]\\\\+\\"' | grep -o '[^\\"]\\\\+' | sort | head -n 1 || die \\"could not list autoscaling group instances: $?\\"`" if [ "$THIS_INSTANCE_ID" == "$LEADER_INSTANCE_ID" ] then echo "I'm it!" else echo "I'm not it!" fi
這非常簡單,並且僅能正常工作,因為該腳本在cron上定期運行,並且錯過了幾次執行或最終多次執行該任務不是災難性的(只會產生不必要的成本)。 如果您確實需要進行同步以確保只有一台機器同時執行任務,那么您將需要比這更復雜的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.