2012-02-19 10 views
7

Używam upstart, aby utworzyć demona dla skryptu spawnowanego nginx python fastcgi. Jeśli używam poniżej to działa:Użycie ubuntu upstart do zatrzymania demona

sudo start myserver 

Co nie działa to:

sudo stop myserver 
stop: Unknown instance: 

Poniżej jest mój plik conf z polecenia do zatrzymania procesu. Zakładam, że polecenie zabicia procesu hte jest w skrypcie przed zatrzymaniem?

#!upstart 
description "myserver" 
author  "Test" 

start on startup 
stop on shutdown 
respawn 
#instance 

script 
    export HOME="/root" 

    echo $$ > /var/run/myerver.pid 
    exec spawn-fcgi -d /home/ubuntu/workspace/rtbopsConfig/myserver/ -f /home/ubuntu/workspace/rtbopsConfig/myserver/index.py -a 127.0.0.1 -p 9001 >> /var/log/myserver.sys.log 2>&1 
end script 

pre-start script 
    # Date format same as (new Date()).toISOString() for consistency 
    echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Starting" >> /var/log/myserver.sys.log 
end script 

pre-stop script 
    rm /var/run/myserver.pid 
    sudo kill `sudo lsof -t -i:9001` 
    echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> /var/log/myserver.sys.log 
end script 
+0

* pytania Nix przenieśli do [superuser.com] (http://superuser.com/) –

Odpowiedz

8

Najlepszym sposobem radzenia sobie z tym byłoby poinformowanie spawn-fcgi o uruchomieniu na pierwszym planie, a nie demonizowaniu. Strona podręcznika spawn-fcgi mówi, że opcja -n to robi. Następnie można przepisać całą tę pracę jako dorobkiewicz to:

start on runlevel [2345] 
stop on runlevel [016] 
respawn  

exec spawn-fcgi -n -d /home/ubuntu/workspace/rtbopsConfig/myserver/ -f /home/ubuntu/workspace/rtbopsConfig/myserver/index.py -a 127.0.0.1 -p 9001 >> /var/log/myserver.sys.log 2>&1 

Należy zauważyć, że z Upstart 1.4 nie trzeba nawet kierunek dziennika, ponieważ domyślnie „dzienniku konsoli”, która miałaby wszystkie dane wyjściowe w/var/log/dorobkiewicz/$ UPSTART_JOB.log .. więc ITW ould prostu

start on runlevel [2345] 
stop on runlevel [016] 
respawn 

exec spawn-fcgi -n -d /home/ubuntu/workspace/rtbopsConfig/myserver/ -f /home/ubuntu/workspace/rtbopsConfig/myserver/index.py -a 127.0.0.1 -p 9001 

warto zauważyć, że ta działa jako root, ale nasłuchuje na porcie 9001. więc pewnie będzie lepiej działa jak nikt . Z Upstart 1.5 (Ubuntu 12.04 i później znowu) Wystarczy dodać to:

setuid nobody 
setgid nogroup 

(może trzeba będzie zmienić nikt/nogroup do ubuntu/ubuntu ponieważ pliki są w katalogu/home/ubuntu)

Należy również zauważyć, że start on startup nie będzie działać niezawodnie, ponieważ zdarzenie startup dzieje się przed zamontowaniem systemów plików i przed uruchomieniem sieci. Również start on shutdown po prostu nie działa, ponieważ nie jest prawdziwym wydarzeniem. Zobacz man upstart-events, aby zobaczyć więcej wydarzeń.

+0

Myślę, że możesz sprawić, że będzie działał niezawodnie, jeśli zmienisz linię 'start' trochę na' start (system plików i urządzenie sieciowe IFACE = lo) lub poziom działania [2345] ' –

+1

Co zrobić, jeśli proces nie może być nieostry t na pierwszy plan? Mam 2 polecenia, phpbrew fpm start i phpbrew fpm stop. Chcę tylko, aby start usługi i przystanek usługi były tłumaczone odpowiednio na te 2 polecenia. Jak mogę to zrobić? – CMCDragonkai

2

wierzę Twój pre-stop jest zatrzymanie serwera, więc kiedy Upstart próbuje zatrzymać serwer nie jest uruchomiony proces zatrzymać i to daje ten błąd.