2009-02-13 13 views
6

Ich habe eine benutzerdefinierte Amazon AMI (Fedora) erstellt ein paar Skripts ausgeführt und fährt dann herunter.Startup-Skript auf EC2

Das Problem mit AMIs ist, dass, wenn sich mein Code ändert, es eine Möglichkeit für die AMI-Instanz geben muss, die neuesten Skripts zu bekommen, bevor sie ausgeführt werden.

ich einen Shell-Skript geschrieben & es ausdrückte in /etc/init.d/nt_startup

den Code, um das Laufendes halten, führe ich einen git pull Shell-Skript in meiner Code-Repository und dann das Skript ausführen.

Das Problem ist, die git pull scheint nicht zu laufen, wenn eine Instanz hochfährt, aber das Python-Skript läuft gut. Nicht sicher, was ich vermisse ... hier ist das Startskript:

#!/bin/bash 
# 
# ec2 Startup script for EC2 machines 
# 
# chkconfig: 345 99 02 
# description: Script used to issue startup and shutdown commands. 
# 

if [ "$1" = "start" ]; then 
/usr/scripts/code/git_latest 
python /usr/scripts/code/process.py 
exit 
fi 

if [ "$1" = "stop" ]; then 
#nothing 
exit 
fi 

Die /usr/scripts/code/git_latest Shell-Skript sieht wie folgt aus:

#pulls in the latest code from the repository 
cd /usr/scripts/code 
sudo git pull 

Es sollte die letzte nach unten process.py Skript Strang ziehen.

Die seltsame Sache ist, dass, wenn ich ssh in meine Instanz und das Startskript manuell ausführen (/etc/init.d/nt_startup "start"), das Git-Skript funktioniert gut.

Fehle ich etwas?

Antwort

3

OK, ich habe es endlich herausgefunden. Nach dem Scheuern im EC2 Ausgabe fand ich diese Zeile:

"Starten ntstartup: sudo: sorry, müssen Sie einen tty haben sudo zu laufen"

Offenbar sperrt Fedora nicht tty sudo Befehle aus.

Eine schnelle Suche führte zu der Lösung: "visudo"

  1. als root ausführen
  2. Suchen Sie die Zeile mit "Default requiretty" und kommentieren Sie sie aus (#Default requiretty)

Hope this für alle anderen hilfreich ist, die in dieser Frage läuft.

+2

Warum verwenden Sie Sudo? Startskripts werden trotzdem als root ausgeführt. – tylerl

0

Sie müssen einen Start-Link in /etc/rc?.d setzen. Sie können chkconfig (8) oder ntsysv (8) verwenden, um diese Verzeichnisse zu verwalten.

+0

Das Skript process.py wird beim Start ausgeführt ... also glaube ich nicht, dass das das Problem ist. Es ist nur so, dass der "Git-Pull" nicht ausgeführt wird. – Mark

+0

BTW, habe ich die obigen Vorschläge (# chkconfig: 345 99 02) und immer noch kein Glück ... Ich kann denken, dass der Git Call fehlschlägt, weil das Netzwerk nicht initialisiert wurde oder etwas? – Mark