Chcę uruchomić apache na Ubuntu 10.04 i używać ładnych elementów nadzoru na początku (nie mówię tylko o skrypcie inicjującym apache, ale odpowiedni nadzór usługi a la daemontools - to znaczy, restartowanie apache po jego śmierci, rzeczy tak).
Czy ktoś ma działającą konfigurację upstart do nadzorowania apache na Ubuntu 10.04?
Google nie pomogło mi, ale możliwe, że mój google-fu jest słaby.
Odpowiedzi:
Woooo!
Napisałem własną wersję, która prawie działa - z pewnym hakowaniem plików conf i używaniem
-D NO_DETACH
.Najpierw miałem do zbioru
User
,Group
aPidFile
w/etc/apache2/apache2.conf
ręcznie, zamiast mieć je mocno w światło/etc/apache2/envvars
. Nie udało mi się znaleźć sposobu na prawidłowe wyeksportowanie tych zmiennych (próbowałem obuenv
iexport
zgodnie z http://manpages.ubuntu.com/manpages/lucid/man5/init.5.html , ale nic dobrego).To jest moja praca
/etc/init/apache2.conf
:Mogę robić
start|stop|status|reload apache2
i uzyskiwać znaczące wyniki; jeśli jestemkill -9
głównym procesem apache, natychmiast się odradza i uruchamia się i zatrzymuje przy starcie zgodnie z oczekiwaniami. Myślę, że działa całkiem dobrze.Próbowałem rzeczy, których nie mogłem uruchomić.
-D NO_DETACH
, w połączeniu z:Nie udało się uruchomić usługi.
/etc/apache2/envvars
do zapełnienia${APACHE_*}
zmiennych:Nie udało się uruchomić i wystąpił błąd
apache2: bad user name ${APACHE_RUN_USER}
.Próbowałem wyjścia konsoli i domyślnych opcji konsoli; w tym momencie naprawdę po prostu wymachiwałem, próbując uzyskać sensowne komunikaty o błędach. Wydawało się, że nie ma znaczenia.
console output
Przydało się to do debugowania wiadomości apache:
exec /usr/sbin/apache2 -X -e debug -E /var/log/apache2/foo.log
To była kolejna próba nie zmodyfikowania,
/etc/apache2/apache2.conf
która się nie powiodła:exec APACHE_RUN_USER=www-data APACHE_RUN_GROUP=www-data APACHE_PID_FILE=/var/run/apache2.pid /usr/sbin/apache2 -D NO_DETACH -e debug -E /var/log/apache2/foo.log
źródło
Ten skrypt działał dla mnie:
źródło
Uderzyłem również w ten problem, jednak zastosowałem inne podejście. Najłatwiejszym sposobem uzyskania zmiennych env jest użycie polecenia source i skierowanie go do pliku envvars apache, a następnie można uruchomić apache z opcjami -D FOREGROUND
więc w zasadzie potrzebujesz skryptu, który wygląda tak (mój jest w /etc/apache2/apache2_foreground.sh):
Następnie ustaw go jako wykonywalny i wskaż przełożonemu jego lokalizację, musisz także użyć znaku stop 6
Dwie pierwsze linie skryptu przechwytują identyfikator grupy procesów skryptu i ustawiają pułapkę, która działa na sygnałach przekazywanych do procesu - pułapka ta wykonuje zabicie z ujemnym identyfikatorem procesu rodzica, który uruchamia wszystkie procesy Apache2 (skrypt sama) - zabicie z ujemnym PID oznacza również zabicie wszystkich dzieci takiego procesu (więc w tym przypadku wszystkich procesów apache2), bez tego nie byłem w stanie zmusić przełożonego do zabicia procesów apache2
Używa się stopign 6, ponieważ nie mogłem sfinalizować żadnego innego sygnału, który mógłby wywołać pułapkę, 9 nie może zostać złapane, a 2 i 3 nic nie robią (skrypt nie jest zabity)
potem powinien działać płynnie, bez żadnych modyfikacji konfiguracji apache2
źródło
Kilka postów od Scotta Jamesa Remnanta na temat, który mam nadzieję może ci pomóc:
źródło
Och, tak, zazwyczaj odpowiedzią będzie „napisz własną”, więc moją typową propozycją byłoby zajrzeć na stronę Pierwsze kroki - na początku i… napisz.
Mam nadzieję, że ktoś bardziej kompetentny w tej kwestii niż ja wpadnie na działający skrypt wstępny.
źródło
Użyłbym podejścia podobnego do Bena Williamsa, ale
-D FOREGROUND
zamiast niego-D NO_DETACH
.źródło