Tło:
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.04
DISTRIB_CODENAME=lucid
DISTRIB_DESCRIPTION="Ubuntu 10.04 LTS"
Zbudowałem nginx i chciałbym użyć Upstart, aby go uruchomić:
Skrypt startowy nginx ze strony:
description "nginx http daemon"
start on runlevel 2
stop on runlevel 0
stop on runlevel 1
stop on runlevel 6
console owner
exec /usr/sbin/nginx -c /etc/nginx/nginx.conf -g "daemon off;"
respawn
Dostaję „nieznane zadanie”, gdy próbuję użyć initctl do uruchomienia go, co właśnie dowiedziałem się, że najwyraźniej oznacza błąd (co jest nie tak z „Błąd”, aby opisać błędy?)
Czy ktoś może skierować mnie we właściwym kierunku? Przeczytałem taką dokumentację i wydaje się to trochę rzadkie w przypadku zamiany init SysV ... ale cokolwiek po prostu trzeba dodać tę pracę do listy, uruchomić ją i zająć się tym, co zostało z mojego życia. .. Jakieś wskazówki?
EDYCJA: initctl wersja init (upstart 0.6.5)
ubuntu
upstart
ubuntu-10.04
chiggsy
źródło
źródło
Odpowiedzi:
Nie można mieć wielu
stop on
dyrektyw w opisie zadania upstart dla Upstart> = 0,5.I
console owner
prawdopodobnie nie jest to, czego chcesz (to sprawia, że Nginx jest właścicielem konsoli systemowej).Próbować:
źródło
man 5 init
daemon off
opcja jest przeznaczona tylko dla programistów.Skończyłem tu więcej niż raz, więc pomyślałem, że po skorzystaniu z tych odpowiedzi przedstawię zaktualizowaną odpowiedź na podstawie własnego doświadczenia. Dzięki szczególnie dla @danorton i @orj za odpowiedzi.
Ten skrypt został przetestowany na Upstart 1.5 działającym na Ubuntu 12.04 z Nginx 1.0.11 i Passenger 3.0.11. Jeśli nie używasz Pasażera, być może będziesz musiał pobawić się
post-stop
linią. Patrz książka kucharska Upstart./etc/init/nginx.conf
Dodaj puste wiersze (możesz usunąć komentarze, jeśli chcesz):Wziąłem skrypt Upstart z Wiki Nginx i poprawiłem go, ponieważ wiele linii nie jest potrzebnych, powoduje zamieszanie lub nie działa.
Może zajść potrzeba zmiany
env DAEMON
ienv PID
linii w zależności od tego, gdzie zainstalowałeś nginx i zapisujesz PID. PID można skonfigurować w nginx.Próbowałem wszystkich form
expect
. Tylkoexpect fork
wydaje się działać. Z Passenger nginx tworzy 61 widelców. Upstart wymaga 0, 1 lub 2. Jak sugerowali inni, Upstart będzie śledził zły PID. Usunąłem również,respawn
ponieważ prawdopodobnie nie robi nic z tego samego powodu. Niektóre dodatkowe skrypty przed / po uruchomieniu mogą to naprawić, chwytając prawdziwy PID. Ja jednak używam monitora do obsługi restartów, więc nie potrzebuję tego.Nie używać
daemon off
. To jest tylko dla rozwoju. Zobacz http://wiki.nginx.org/CoreModule#daemonBibliografia:
źródło
daemon off;
tak że dorobkiewicz zegarki prawidłowego procesu / PID bez potrzeby zapewnieniaexpect fork
lubpost-stop
dyrektyw. Sekcja wiki opisująca opcję demona mówi także: „Możesz bezpiecznie wyłączyć demona w trybie produkcyjnym z runit / daemontools, jednak nie możesz wykonać płynnego uaktualnienia.”, Który, jak zakładam, odnosi się do uaktualnienia do nowego pliku binarnego na funkcja latania .Nie możesz W każdym razie przynajmniej niewłaściwie.
Nginx nie odradza swojego demona na jeden z dwóch sposobów wymaganych przez upstart, albo poprzez „expect fork” lub „expect demon”, więc upstart nie jest w stanie śledzić głównego procesu nginx. Jest kilka hacków, ale mają swoje własne problemy.
Jeśli nie masz nic przeciwko temu, że upstart nie może śledzić procesu głównego i zabić go podczas zamykania, zadziała to:
źródło
expect daemon
powoduje, że upstart zawiesił się dla mnie (Ubuntu 12.04, Upstart 1.5, Nginx).expect fork
działało, chociaż jak wskazuje @danorton, Upstart będzie śledził zły PID. Nie mogłem też odrodzić się do pracy (zobacz moją pełną odpowiedź).Jest to przykładowy plik konfiguracyjny Upstart w nginx Wiki .
Konieczne może być dostosowanie ścieżki do pliku binarnego nginx w pliku konfiguracyjnym.
Ten plik konfiguracyjny działa dobrze dla mnie z Ubuntu 10.04 i nginx 1.0.5.
Zainstalowałem również
nginx
dowiązanie symboliczne/etc/init.d
wskazujące na,/lib/init/upstart-job
aby móc używać standardowegoservice
polecenia do uruchamiania i zatrzymywanianginx
.Uwaga: Jeśli zainstalujesz Phusion Passenger z NGINX, może być konieczne dodanie następującej zwrotki do skryptu konfiguracyjnego Upstart:
Uważam to za konieczne w mojej konfiguracji Ubuntu. W przeciwnym razie, kiedy wydałem
initctl stop nginx
lubservice nginx stop
nginx tak naprawdę nie przestał. Zauważyłem również, że Upstart myślał, że proces nginx ma PID, który w rzeczywistości jest PID jednego z procesów Pasażera. Widać więc wyraźnie, że NGINX / Passenger nieco myli Upstart.źródło
stop: Job failed while stopping
. Widziałeś to?Używam:
Zatrzymanie
runlevel [!...]
wydaje się bardziej standardowe. To właśnie robią standardowe skrypty ssh / samba. Powinieneś także dodaćrespawn
bit, aby wznowił działanie po śmierci. Nie jestem również pewien, dlaczego chcesz,console output
aby po prostu wysyłało wyjście konsoli na standardowe wyjście. Domyślnym zachowaniem jest po prostu wysyłanie danych wyjściowych konsoli do programu rejestrującego.Możesz zobaczyć wszystkie dokumenty ze strofa na wiki Upstart
źródło
Więcej informacji można znaleźć na stronie http://geeknme.wordpress.com/2009/10/15/getting-started-with-upstart-in-ubuntu .
źródło
Co dziwne, żadna z odpowiedzi tutaj nie działa w pełni, ponieważ zostawiają start w stanie zatrzymania / zabicia, co uniemożliwia kolejne rozpoczęcie działania. Oznacza to, że
restart nginx
zawodzi.Błąd związany z upstartem jest dobrze udokumentowany na https://bugs.launchpad.net/upstart/+bug/406397 i jestem zaskoczony, że autor upstartu nie wydaje się wystarczająco zainteresowany, aby go naprawić. Jedyne rozwiązanie, które widziałem, które działa, jest następujące (skradzione z tego samego zgłoszenia błędu):
Zaletą pisania w ten sposób jest to, że działa nawet odrodzenie. Wadą jest to, że jest brzydki i nieprzyjemny hack.
źródło