Apache: uruchamianie, zatrzymywanie i restart – polecenia i różnica z graceful

Środowisko testoweRodzina RHELAlmaLinux 9.8konto rootSprawdzono 2026-10-29

Na serwerze Linux Apache uruchamia się, zatrzymuje i restartuje poleceniem systemctl, a nazwa usługi to httpd w rodzinie RHEL i apache2 w rodzinie Debian. Po przeczytaniu wyniku systemctl status, pliku unit httpd i skryptu apachectl na serwerze AlmaLinux 9 okazało się, że restart wyłącza Apache i uruchamia go ponownie, a graceful zostawia proces nadrzędny i tylko ponownie wczytuje konfigurację.

Ponieważ zatrzymanie i restart naprawdę wstrzymują usługę, na serwerze testowym nie uruchamialiśmy start, stop ani restart. Zamiast tego sprawdziliśmy działanie w oficjalnej dokumentacji Apache, w podręczniku httpd.service i w zapisach reload pozostawionych na serwerze. Nazwa hosta, numer portu, godziny i liczby żądań w wyniku poniżej to wartości przykładowe.

1️⃣ Polecenia do uruchamiania, zatrzymywania i restartu Apache

Nazwa usługi Apache zależy od rodziny dystrybucji. Rodzina RHEL, czyli RHEL, AlmaLinux i Rocky Linux, rejestruje ją w systemd jako httpd, a Ubuntu i Debian jako apache2.

ZadanieRodzina RHEL (httpd)Rodzina Debian (apache2)
Uruchomieniesystemctl start httpdsystemctl start apache2
Zatrzymaniesystemctl stop httpdsystemctl stop apache2
Restartsystemctl restart httpdsystemctl restart apache2
Ponowne wczytanie konfiguracji (graceful)systemctl reload httpdsystemctl reload apache2
Sprawdzenie stanusystemctl status httpdsystemctl status apache2
Automatyczne uruchamianie przy starcie systemusystemctl enable httpdsystemctl enable apache2

Polecenia z tabeli uruchamiaj jako root. Na zwykłym koncie dodaj sudo przed poleceniem.

Jeśli pomylisz rodziny i wpiszesz drugą nazwę, polecenie się nie wykona. Zapytanie o stan przez apache2 na serwerze z rodziny RHEL zwróciło błąd, że nie znaleziono unitu.

systemctl status apache2
Unit apache2.service could not be found.

Kod wyjścia wynosił wtedy 4, a po zmianie nazwy na httpd na tym samym serwerze pojawił się normalny wynik.

W rodzinie RHEL Apache uruchamia się, zatrzymuje i restartuje trzema poleceniami poniżej.

systemctl start httpd

start uruchamia zatrzymany Apache. Czy wystartował, sprawdzisz poleceniem systemctl status.

systemctl stop httpd

stop zatrzymuje Apache. Dopóki go znowu nie uruchomisz, nie przyjmuje żądań WWW.

systemctl restart httpd

restart wykonuje po kolei stop i start. Jeśli zmieniasz tylko pliki konfiguracyjne, zastosuj je przez reload (graceful), który nie zrywa połączeń.

W AlmaLinux 9 apachectl to skrypt powłoki zainstalowany zamiast apachectl dostarczanego przez Apache. Po otrzymaniu start, stop, restart i status przekazuje je bez zmian do systemctl, więc apachectl restart i systemctl restart httpd robią to samo.

2️⃣ Sprawdzanie stanu usługi Apache

To, czy Apache teraz działa i kiedy wystartował, sprawdzisz poleceniem systemctl status.

systemctl status httpd
● httpd.service - The Apache HTTP Server
     Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; preset: disabled)
     Active: active (running) since Sat 2026-10-17 08:30:49 UTC; 1 week 4 days ago
       Docs: man:httpd.service(8)
    Process: 2930107 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
   Main PID: 741 (httpd)
     Status: "Total requests: 52418; Idle/Busy workers 75/0;Requests/sec: 0.0528; Bytes served/sec: 3.9KB/sec"
      Tasks: 224 (limit: 4615)
     Memory: 184.3M (peak: 593.8M)
        CPU: 47min 33.944s
     CGroup: /system.slice/httpd.service
             ├─    741 /usr/sbin/httpd -DFOREGROUND
             ├─2930111 /usr/sbin/httpd -DFOREGROUND
             ├─2930143 /usr/sbin/httpd -DFOREGROUND
             └─2930144 /usr/sbin/httpd -DFOREGROUND

Oct 28 15:00:00 server systemd[1]: Reloading The Apache HTTP Server...
Oct 28 15:00:00 server systemd[1]: Reloaded The Apache HTTP Server.
Oct 28 15:00:00 server httpd[741]: Server configured, listening on: port 80

active (running) w wierszu [Active] oznacza, że usługa właśnie działa, a godzina po since to moment startu. Ten serwer wystartował 11 dni wcześniej i ani razu się nie zatrzymał, a [Main PID] 741 to proces nadrzędny uruchomiony wtedy.

W [CGroup] pod 741 są wymienione procesy potomne, które faktycznie obsługują żądania (zobacz Procesy). Wiersz [Status] pokazuje liczbę dotąd obsłużonych żądań oraz liczbę wolnych i zajętych workerów.

Trzy wiersze logu na dole wyniku to zapisy reload pozostawiane raz dziennie o tej samej godzinie: narzędzie logrotate, które dzieli logi według dat, po zakończeniu rotacji wykonało systemctl reload httpd, a podręcznik httpd.service również podaje, że po logrotate httpd dostaje reload.

W skryptach i poleceniach kontrolnych używaj is-active i is-enabled, które wypisują tylko jedno słowo.

systemctl is-active httpd
active

Gdy usługa działała, pojawiło się active i kod wyjścia 0. Nawet dla apache2, którego na serwerze nie ma, pojawiło się inactive i kod wyjścia 3, tak samo jak dla zatrzymanej usługi, więc w skryptach najpierw sprawdź, czy nazwa usługi jest poprawna.

systemctl is-enabled httpd
enabled

enabled oznacza, że Apache jest zarejestrowany do automatycznego uruchamiania przy starcie systemu.

3️⃣ Różnica między restartem Apache a graceful

restart i graceful (reload) inaczej traktują żądania w toku i proces nadrzędny. Tę różnicę najpierw sprawdziliśmy w wierszach pliku unit httpd używanych przy reload i stop.

systemctl cat httpd | grep -E "Exec|Kill"
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
KillSignal=SIGWINCH
KillMode=mixed

Wiersz ExecReload oznacza, że reload uruchamia httpd -k graceful, a wiersz KillSignal oznacza, że sygnał wysyłany przy stop to SIGWINCH (graceful-stop).

Dlatego systemctl restart httpd zatrzymuje Apache przez graceful-stop, a potem uruchamia go od nowa. Żądania w toku są kończone przed wyłączeniem, ale sam proces nadrzędny startuje od nowa, więc numer [Main PID] się zmienia. Między zatrzymaniem a startem port jest zamknięty i nowe połączenia nie są przyjmowane. Plik unit apache2.service z pakietu Debiana też przy zatrzymaniu uruchamia apachectl graceful-stop.

httpd -k restart wysyła do procesu nadrzędnego sygnał HUP. Według oficjalnej dokumentacji Apache proces nadrzędny zostaje, ale procesy potomne kończą się od razu, więc żądania w toku są przerywane, a statystyki żądań wracają do 0.

graceful wysyła do procesu nadrzędnego sygnał USR1. Proces nadrzędny ponownie wczytuje pliki konfiguracyjne, a każdy proces potomny jest zastępowany procesem z nową konfiguracją, gdy tylko skończy obsługiwane żądanie. Połączenia, które przychodzą w tym czasie, czekają w kolejce systemu operacyjnego, więc nie giną.

To tak, jakby sklep nie zamykał drzwi, a każdy kasjer po obsłużeniu klienta przekazywał stanowisko koledze z nowego grafiku.

🔁 Co się zmienia przy trzech sposobach restartu Apache
Diagram objaśniający
🔁 Polecenie
$ systemctl restart httpdhttpd -k restartsystemctl reload httpd
① Proces nadrzędny (Main PID)Wyłącza się i startuje od nowaNumer Main PID się zmienia.bez zmianOdbiera sygnał HUP i ponownie wczytuje pliki konfiguracyjne.bez zmianOdbiera sygnał USR1 i ponownie wczytuje pliki konfiguracyjne.
② Żądania w tokuKończone, potem wyłączenieZatrzymanie to graceful-stop (WINCH), więc żądania w toku są kończone.Od razu przerwaneOd razu kończy procesy potomne i uruchamia nowe.Obsłużone do końcaKażdy proces potomny po swoim żądaniu jest zastępowany procesem z nową konfiguracją.
③ Nowe połączeniaNieprzyjmowane do ponownego startuPrzy zatrzymaniu zamyka port.Obsłużone po starcie nowych procesówZostawia port otwarty i obsługuje je po starcie nowych procesów potomnych.Nie są zrywaneZostawia port otwarty, więc system operacyjny trzyma połączenia w kolejce.
systemctl restart httpd zatrzymuje Apache, a potem uruchamia go ponownie, więc od nowa startuje sam proces nadrzędny i w tym czasie nowe połączenia nie są przyjmowane.
httpd -k restart wysyła do procesu nadrzędnego sygnał HUP i od razu kończy procesy potomne, więc żądania w toku są przerywane.
systemctl reload httpd i apachectl graceful zostawiają proces nadrzędny bez zmian i wymieniają procesy potomne w kolejności, w jakiej kończą się ich żądania.

Tę różnicę sprawdziliśmy po Main PID. Choć reload działał codziennie, Main PID 741 i czas Active pozostały takie jak 11 dni wcześniej, a numery procesów potomnych (2930111 itd.) następowały zaraz po 2930107 z wiersza [Process] ostatniego reload.

systemctl reload httpd, apachectl graceful i httpd -k graceful to ten sam graceful. W AlmaLinux 9 apachectl po otrzymaniu graceful wysyła przez systemctl kill sygnał SIGUSR1 do procesu nadrzędnego, a apachectl -k graceful z -k na początku pomija -k i robi to samo.

graceful tylko ponownie wczytuje konfigurację, więc nie nadaje się po aktualizacji pakietu httpd. Według podręcznika httpd.service reload nie jest bezpieczny, jeśli zaktualizowany moduł korzysta z funkcji, która istnieje tylko w nowym httpd, dlatego pakiet httpd przy aktualizacji automatycznie restartuje Apache poleceniem systemctl try-restart.

4️⃣ Sprawdzanie składni konfiguracji Apache

Nawet jeśli zmiany stosujesz przez graceful, żeby nie zrywać połączeń, Apache nie przejdzie na nową konfigurację, gdy w pliku konfiguracyjnym jest literówka. Według oficjalnej dokumentacji Apache restart i graceful przed wykonaniem najpierw sprawdzają składnię, a przy błędzie tylko wypisują komunikat błędu i nie restartują.

Dlatego po poprawieniu konfiguracji najpierw sprawdź składnię poleceniem apachectl -t.

apachectl -t
Syntax OK

apachectl -t wypisał jeden wiersz Syntax OK, a apachectl configtest dał ten sam wynik. apachectl z rodziny RHEL po otrzymaniu -t uruchamia po prostu httpd -t.

Sprawdzenie testowego pliku konfiguracyjnego z jedną błędnie wpisaną nazwą dyrektywy dało zamiast Syntax OK błąd AH00526 z numerem wiersza i nierozpoznaną dyrektywą ([Invalid command 'DirectoryIndx']), a kod wyjścia wyniósł 1. Popraw wiersz wskazany w komunikacie błędu i sprawdź ponownie.

systemctl reload httpd

Gdy sprawdzenie przejdzie, zastosuj konfigurację przez reload. Według oficjalnej dokumentacji Apache sprawdzenie składni patrzy tylko na składnię, więc zastosowanie może się nie udać, nawet jeśli sprawdzenie przeszło. Po reload jeszcze raz sprawdź wiersz [Active] w systemctl status i logi na samym dole.

🔲 Symulator poleceń Apache

Na wirtualnym serwerze w symulatorze poniżej możesz sam wpisywać polecenia systemctl, apachectl i httpd -k. Po reload Main PID zostaje ten sam i zmieniają się tylko numery procesów potomnych. Po restart nawet Main PID dostaje nowy numer.

Symulator poleceń Apachehttpd z rodziny RHEL
[root@server work]#
Klawiszami ↑↓ przywołasz wcześniej wpisane polecenia.

🔢 FAQ & polecane treści

Po wpisaniu apachectl fullstatus w AlmaLinux 9 pojawił się błąd, że opcja fullstatus nie jest obsługiwana (not supported), i kod wyjścia 2. apachectl z rodziny RHEL to skrypt zainstalowany zamiast apachectl dostarczanego przez Apache, więc przyjmuje tylko start, stop, restart, status, graceful, graceful-stop, configtest, -t i -v.

Według podręcznika httpd.service unit httpd jest domyślnie wyłączony (disabled), a preset: disabled w wierszu [Loaded] polecenia systemctl status to właśnie ta wartość domyślna. Jednorazowe systemctl enable httpd sprawia, że Apache startuje przy każdym uruchomieniu systemu, a dodanie --now do enable od razu go też uruchamia.

Według podręcznika httpd.service uruchomienie httpd bezpośrednio z powłoki root startuje usługę poza systemd i nie obejmuje jej domyślnymi ograniczeniami bezpieczeństwa, takimi jak SELinux. Dlatego uruchamiaj i zatrzymuj usługę przez systemctl albo apachectl, a polecenia httpd używaj tylko z opcjami, które nie uruchamiają usługi, jak sprawdzenie składni -t.

ℹ️ Informacja o linkach partnerskich
Treści tej witryny zawierają linki partnerskie. Jeśli odwiedzający kupi produkt lub usługę przez taki link, witryna otrzymuje od sprzedawcy prowizję. Kwota płacona przy tym przez kupującego (podczas promocji spada↓) nie wzrasta. Podane ceny, rabaty i dostępność odnoszą się do chwili pisania i mogą różnić się od stanu faktycznego, dlatego przed zakupem sprawdź je u sprzedawcy. Produkty wybieramy i oceniamy według własnych kryteriów, a prowizja nie wpływa ani na kolejność prezentacji, ani na treść ocen.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *

Prove your humanity: 6   +   8   =