2011-12-05 28 views
6

Korzystam z AMI Amazon Linux i wykonuję pewne niestandardowe modyfikacje (dodano serwer ax2, itp.) I zapisuję go jako nowy AMI. Teraz, gdy chcę załadować AMI, uruchom ax2server (tzn. Serwer.axis2 powinien automatycznie się uruchomić po uruchomieniu instancji). Do tego użyłem skryptu init, jak poniżej i prowadził następującą komendę:Dodawanie skryptu uruchamiania usługi dla usługi Amazon linux AMI

chkconfig --add axisservice 

Ale kiedy uruchomi nową instancję z mojego obrazu, axis2server nie jest podręczny.

Po uruchomieniu wystarczy tylko uruchomić skrypt /home/ec2-user/axis2-1.6.1/bin/axis2server.sh. Czy tu czegoś brakuje?

#! /bin/sh 
# Basic support for IRIX style chkconfig 
### 
# chkconfig: 235 98 55 
# description: Manages the services you are controlling with the chkconfig command 
### 

case "$1" in 
    start) 
     echo -n "Starting axisservice"   
     touch ~/temp.txt 
     cd /home/ec2-user/axis2-1.6.1/bin 
     ./axis2server.sh & 
     echo "." 
     ;; 
    stop) 
     echo -n "Stopping axisservice" 
     echo "." 
     ;; 

    *) 
     echo "Usage: /sbin/service axisservice {start|stop}" 
     exit 1 
esac 

exit 0 

przeszedłem https://help.ubuntu.com/community/CloudInit jak dobrze i zapewnia mechanizm o nazwie Skrypty użytkownika danych, gdzie użytkownik może uruchomić skrypt przy uruchamianiu skryptu.

$ euca-run-instances --key mykey --user-data-file myscript.sh ami-axxxx 

Jest to opcja wiersza poleceń i czego chcę jest coś takiego, kiedy uruchomić instancję za pośrednictwem interfejsu użytkownika, skrypt powinien być started.Therefore, myślę, że powyższa opcja nie może być używana w moim przypadku. Proszę, popraw mnie jeśli się mylę.

Dzięki H.

+0

Aby sprawdzić podstawy, czy skrypt ma odpowiednie uprawnienia do uruchomienia przy starcie? Czy próbowałeś uruchomić go ręcznie? – David

+0

Znalazłeś rozwiązanie? Chcę również uruchomić serwer Redis i plik node.js, gdy moja instancja zostanie ponownie uruchomiona. Wygląda na to, że Amazon AMI nie ma tutaj zainstalowanego update-rc.d. – user482594

Odpowiedz

3

Założę środowisko nie jest ustawiony (prawidłowo). Oznacza to, że zgaduję, że twój skrypt powłoki próbuje uruchomić inny program i nie można go znaleźć.

Tak w pierwszym, bym wyregulować start część skryptu (aktualny):

echo -n "Starting axisservice"   
touch ~/temp.txt 
cd /home/ec2-user/axis2-1.6.1/bin 
./axis2server.sh & 
echo "." 

edycja:

echo -n "Starting axisservice"   
touch ~/temp.txt 
cd /home/ec2-user/axis2-1.6.1/bin 
./axis2server.sh 
RETVAL=$? 
[ $RETVAL -eq 0 ] && echo Success 
[ $RETVAL -ne 0 ] && echo Failure 
echo "." 

Więc co ja zrobiłem?

  • usunięte & więc skrypt czeka na skrypcie powłoki (axis2server.sh), aby zakończyć
  • sprawdził stan zwrotny ($?) swojego skryptu powłoki

Dalsze debugowanie:

Dodaj set -x do skryptów, aby włączyć śledzenie i rejestrowanie stderr i stdout.

Pytania:

  1. Czy jesteś świadomy, że stop (w skrypcie usług) nic nie robi?
  2. touch ~/temp.txt to ma stworzyć /root/temp.txt? (Mam zgadywania korzeniowe działa ten skrypt.)
  3. Jeśli żadna z moich propozycji pracy, można udostępnić axis2server.sh i wklej stderr i stdout?