Führen Sie nach dem Start der EC2-Instanz ein Bash-Skript aus

19

Ich habe ein Skript auf einer EC2-Instanz, mit dem eine andere Instanz remote gestartet wird.

Nachdem diese Instanz vollständig geladen wurde (fertig gebootet), soll automatisch ein Bash-Skript ausgeführt werden. Was ist der beste Weg, dies zu tun?

Ich brauche alles, um vollständig gestartet zu werden, im Grunde führt das Bash-Skript ein Bildkonvertierungsskript aus (mit ImageMagick und führt den Befehl "wget" einige Male aus).

Derzeit befindet sich das Skript hier:

/home/root/beginProcess.sh

Und ich kann es manuell durch Ausführen starten

bash beginProcess.sh

RHEL-6.2-Starter-EBS-i386

Hieran ist auch ein EBS-Band angehängt, wenn das hilft, danke!

SSH Dies
quelle

Antworten:

26

Ich würde vorschlagen, nur die Benutzerdaten- Option zu verwenden ec2-run-instances. Hiermit können Sie der VM ein Skript zuweisen, das beim ersten Start ausgeführt wird. Wenn Sie Ubuntu oder Debian verwenden, können Sie cloud-init verwenden , was den Prozess ein wenig aufpoliert. Wenn Sie cloud-init verwenden, können Sie im [runcmd]Abschnitt der Konfigurationsdatei beliebige Befehle angeben, die nach dem Start ausgeführt werden sollen.

Vielen Dank an SF-Benutzer Eric Hammond für die Benutzerdatenseite. Schauen Sie sich seine Website an - sie enthält eine Fülle von Informationen zu AWS.

Bearbeiten: Nach dem erneuten Lesen ist nicht klar, ob Sie beim ersten Start oder bei jedem Start einen Befehl ausführen möchten. Die obigen Anweisungen gelten nur für den ersten Start. Wenn Sie bei jedem Systemstart einen Befehl ausführen möchten, haben Sie einige Optionen: Sie können einen Befehl über die @rebootcron-Direktive ausführen oder Sie können das Skript hinzufügen /etc/rc.local, das bei jedem Systemstart ausgeführt wird.

EEAA
quelle
1
Ein großartiger Dank für die Antwort, um zu verdeutlichen, dass ich wollte, dass es jedes Mal läuft, wenn das System hochfährt, /etc/rc.locales funktioniert wunderbar, Prost
SSH This
9

Wenn Sie ein AMI verwenden, auf dem das cloud-initPaket installiert ist (z. B. Amazon Linux oder Ubuntu), können Sie einfach das Bash-Skript (das mit #! Beginnt) als Benutzerdatendatei übergeben und es wird am Ende des Programms automatisch ausgeführt Bootvorgang.

Zum Beispiel könnte es so einfach sein wie:

ec2-run-instances                             \
  --user-data-file /home/root/beginProcess.sh \
  --key $USER                                 \
  ami-XXXXXXXX

In diesem Artikel habe ich das Benutzerdatenskriptkonzept vorgestellt, das jetzt in wichtigen EC2-AMIs wie Amazon Linux und Ubuntu verfügbar ist: http://alestic.com/2009/06/ec2-user-data-scripts

Leider sieht es so aus, als ob Sie einen RHEL AMI verwenden möchten. Ich habe eine Kopie davon ausgeführt und konnte keine Verweise auf cloud-init oder das Ausführen von Benutzerdatenskripten beim ersten Start finden, noch habe ich die gleiche Arbeit getestet.

Ich sage nicht, dass Sie Linux-Distributionen nur für diesen Zweck wechseln sollten, aber Amazon Linux basiert auf RHEL, sodass dies für Sie funktionieren könnte.

Hier ist ein Artikel, den ich geschrieben habe, der Ihnen beim Debuggen Ihres Benutzerdatenskripts helfen könnte, wenn es beim ersten Mal nicht funktioniert: http://alestic.com/2010/12/ec2-user-data-output

Eric Hammond
quelle
Offtopic, aber danke, dass Sie so einen unschätzbaren Beitrag geleistet haben. Drei mal hurra.
Danieljimenez