Zatrzymywanie i ponowne uruchamianie serwera Apache HTTP


Graceful Restart

Signal: USR1 apachectl -k graceful

Sygnał USR1 lub graceful powoduje, że proces nadrzędny doradza dzieciom wyjście po ich bieżącym żądaniu (lub natychmiastowe zakończenie, jeśli „nic nie obsługują). Rodzic ponownie odczytuje swoje pliki konfiguracyjne i ponownie otwiera swoje pliki dziennika. Gdy każde dziecko umiera, rodzic zastępuje je dzieckiem z nowej generacji konfiguracji, które natychmiast rozpoczyna obsługę nowych żądań.

Ten kod jest zaprojektowany tak, aby zawsze przestrzegać dyrektywy MPM kontroli procesu, więc liczba procesów i wątków dostępnych do obsługi klientów będzie utrzymywana na odpowiednich wartościach przez cały proces restartu. Ponadto przestrzega StartServers w następujący sposób: jeśli po jednej sekundzie przynajmniej StartServers nowe dzieci nie zostały utworzone, a następnie stwórz wystarczająco dużo, aby zebrać luz. Dlatego kod stara się zachować zarówno liczbę elementów potomnych odpowiednią dla bieżącego obciążenia serwera, jak i uszanować Twoje życzenia za pomocą parametru StartServers.

Użytkownicy mod_status zauważy, że statystyki serwera nie są ustawione na zero po wysłaniu USR1. Kod został napisany tak, aby zarówno zminimalizować czas, w którym serwer nie jest w stanie obsłużyć nowych żądań (będą one ustawiane w kolejce przez system operacyjny, więc w żadnym wypadku nie zostaną utracone), jak i uszanować parametry strojenia. zrób to, aby tablica wyników służyła do śledzenia wszystkich dzieci z różnych pokoleń.

Moduł statusu użyje również G do wskazania tych dzieci, które są nadal obsługuje żądania rozpoczęte przed wdzięcznym ponownym uruchomieniem.

Obecnie nie ma możliwości, aby skrypt rotacji logów korzystający z USR1 wiedział na pewno, że wszystkie dzieci piszą dziennik przed ponownym uruchomieniem został zakończony. Sugerujemy użycie odpowiedniego opóźnienia po wysłaniu sygnału USR1, zanim zrobisz cokolwiek ze starym dziennikiem. Na przykład, jeśli większość trafień zajmuje mniej niż 10 minut dla użytkowników korzystających z łączy o niskiej przepustowości, możesz poczekać 15 minut, zanim zrobisz cokolwiek ze starym dziennikiem.

Po ponownym uruchomieniu najpierw uruchamiane jest sprawdzanie składni, aby upewnić się, że w plikach konfiguracyjnych nie ma błędów. Jeśli plik konfiguracyjny zawiera błędy, zostanie wyświetlony komunikat o błędzie dotyczący tego błędu składni, a serwer odmówi ponownego uruchomienia. Pozwala to uniknąć sytuacji, w której serwer zatrzymuje się, a następnie nie może ponownie uruchomić, pozostawiając niedziałający serwer.

To nadal nie gwarantuje, że serwer uruchomi się poprawnie. Aby sprawdzić semantykę plików konfiguracyjnych, a także składnię, możesz spróbować uruchomić httpd jako użytkownik inny niż root. Jeśli nie ma błędów, spróbuje otworzyć swoje gniazda i dzienniki, ale zakończy się niepowodzeniem, ponieważ nie jest on rootem (lub ponieważ aktualnie działający httpd ma już powiązane te porty). Jeśli to się nie powiedzie z jakiegokolwiek innego powodu jest to prawdopodobnie błąd pliku konfiguracyjnego i błąd powinien zostać naprawiony przed wykonaniem pełnego wdzięku restartu.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *