Apache starten, stoppen, neu starten: Befehle und der Unterschied zu graceful

TestumgebungRHEL-FamilieAlmaLinux 9.8root-KontoGeprüft am 2026-10-29

Auf einem Linux-Server wird Apache mit dem Befehl systemctl gestartet, gestoppt und neu gestartet; der Dienstname ist httpd in der RHEL-Familie und apache2 in der Debian-Familie. Nach dem Lesen der Ausgabe von systemctl status, der Unit-Datei von httpd und des Skripts apachectl auf einem AlmaLinux-9-Server zeigte sich: restart fährt Apache herunter und wieder hoch, während graceful den Elternprozess behält und nur die Konfiguration neu einliest.

Da Stoppen und Neustarten den Dienst tatsächlich anhalten, haben wir start, stop und restart auf dem Testserver nicht ausgeführt. Stattdessen haben wir das Verhalten anhand der offiziellen Apache-Dokumentation, der Manpage httpd.service und der auf dem Server vorhandenen reload-Einträge geprüft. Hostname, Portnummer, Uhrzeiten und Anfragezahlen in der Ausgabe unten sind Beispielwerte.

1️⃣ Befehle zum Starten, Stoppen und Neustarten von Apache

Der Dienstname von Apache hängt von der Distributionsfamilie ab. Die RHEL-Familie wie RHEL, AlmaLinux und Rocky Linux registriert ihn in systemd als httpd, Ubuntu und Debian als apache2.

AufgabenRHEL-Familie (httpd)Debian-Familie (apache2)
Startensystemctl start httpdsystemctl start apache2
Stoppensystemctl stop httpdsystemctl stop apache2
Neu startensystemctl restart httpdsystemctl restart apache2
Konfiguration neu laden (graceful)systemctl reload httpdsystemctl reload apache2
Status prüfensystemctl status httpdsystemctl status apache2
Beim Booten automatisch startensystemctl enable httpdsystemctl enable apache2

Führe die Befehle in der Tabelle als root aus. Mit einem normalen Konto setzt du sudo vor den Befehl.

Wenn du die Familien verwechselst und den anderen Namen eingibst, wird der Befehl nicht ausgeführt. Die Statusabfrage mit apache2 auf einem Server der RHEL-Familie ergab einen Fehler, dass die Unit nicht gefunden wurde.

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

Der Exit-Code war 4, und als wir den Namen auf demselben Server in httpd änderten, kam die normale Ausgabe.

In der RHEL-Familie wird Apache mit den drei Befehlen unten gestartet, gestoppt und neu gestartet.

systemctl start httpd

start startet ein angehaltenes Apache. Ob es gestartet ist, prüfst du mit systemctl status.

systemctl stop httpd

stop hält Apache an. Bis zum nächsten Start nimmt es keine Webanfragen an.

systemctl restart httpd

restart führt stop und start nacheinander aus. Wenn du nur Konfigurationsdateien geändert hast, übernimm sie mit reload (graceful), das keine Verbindungen trennt.

Unter AlmaLinux 9 ist apachectl ein Shell-Skript, das anstelle des von Apache mitgelieferten apachectl installiert ist. Es reicht start, stop, restart und status direkt an systemctl weiter, daher tun apachectl restart und systemctl restart httpd dasselbe.

2️⃣ Status des Apache-Dienstes prüfen

Ob Apache gerade läuft und wann es gestartet wurde, prüfst du mit 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) in der Zeile [Active] bedeutet, dass es gerade läuft, und die Uhrzeit nach since ist der Startzeitpunkt. Dieser Server wurde vor 11 Tagen gestartet und seitdem nie angehalten, und [Main PID] 741 war der damals gestartete Elternprozess.

Unter [CGroup] stehen unter 741 die Kindprozesse, die die Anfragen tatsächlich bearbeiten (siehe Prozesse). Die Zeile [Status] zeigt die Zahl der bisher bearbeiteten Anfragen sowie die Zahl der freien und beschäftigten Worker.

Die drei Logzeilen ganz unten in der Ausgabe waren reload-Einträge, die einmal täglich zur selben Uhrzeit entstanden: Das Werkzeug logrotate, das Logs nach Datum aufteilt, führte nach der Rotation systemctl reload httpd aus, und auch die Manpage httpd.service nennt ein reload von httpd nach logrotate.

In Skripten und Prüfbefehlen verwendest du is-active und is-enabled, die nur ein einzelnes Wort ausgeben.

systemctl is-active httpd
active

Im laufenden Zustand kamen active und Exit-Code 0. Auch mit apache2, das auf dem Server gar nicht existiert, kamen inactive und Exit-Code 3 wie bei einem gestoppten Dienst; prüfe in Skripten also zuerst, ob der Dienstname stimmt.

systemctl is-enabled httpd
enabled

enabled bedeutet, dass Apache so registriert ist, dass es beim Booten automatisch startet.

3️⃣ Apache-Neustart und graceful im Vergleich

restart und graceful (reload) gehen unterschiedlich mit laufenden Anfragen und dem Elternprozess um. Diesen Unterschied haben wir zuerst an den Zeilen der Unit-Datei von httpd geprüft, die für reload und stop gelten.

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

Die Zeile ExecReload bedeutet, dass reload httpd -k graceful ausführt, und die Zeile KillSignal bedeutet, dass beim Stoppen das Signal SIGWINCH (graceful-stop) gesendet wird.

Deshalb hält systemctl restart httpd Apache mit graceful-stop an und startet es danach neu. Laufende Anfragen werden vor dem Herunterfahren beendet, aber der Elternprozess selbst startet neu, daher ändert sich die Nummer bei [Main PID]. Zwischen Stoppen und Starten ist der Port geschlossen, und neue Verbindungen werden nicht angenommen. Auch die Unit-Datei apache2.service des Debian-Pakets führt beim Stoppen apachectl graceful-stop aus.

httpd -k restart sendet dem Elternprozess ein HUP-Signal. Laut offizieller Apache-Dokumentation bleibt der Elternprozess bestehen, beendet die Kindprozesse aber sofort, sodass laufende Anfragen abbrechen und auch die Anfragestatistik auf 0 zurückgesetzt wird.

graceful sendet dem Elternprozess ein USR1-Signal. Der Elternprozess liest die Konfigurationsdateien neu ein, und jeder Kindprozess wird, sobald er seine laufende Anfrage beendet hat, durch einen Kindprozess mit der neuen Konfiguration ersetzt. Verbindungen, die in dieser Zeit eintreffen, hält das Betriebssystem in der Warteschlange, sodass sie nicht verloren gehen.

Es ist wie ein Laden, der geöffnet bleibt, während jede Kassenkraft nach dem aktuellen Kunden an eine Kollegin oder einen Kollegen aus dem neuen Schichtplan übergibt.

🔁 Was sich bei den drei Arten des Apache-Neustarts ändert
Erklär-Diagramm
🔁 Befehl
$ systemctl restart httpdhttpd -k restartsystemctl reload httpd
① Elternprozess (Main PID)Fährt herunter und startet neuDie Nummer der Main PID ändert sich.UnverändertErhält das HUP-Signal und liest die Konfigurationsdateien neu ein.UnverändertErhält das USR1-Signal und liest die Konfigurationsdateien neu ein.
② Laufende AnfragenErst beendet, dann heruntergefahrenDas Stoppen ist graceful-stop (WINCH), daher werden laufende Anfragen beendet.Sofort abgebrochenBeendet die Kindprozesse sofort und startet neue Kindprozesse.Bis zum Ende bearbeitetJeder Kindprozess wird nach seiner Anfrage durch einen mit der neuen Konfiguration ersetzt.
③ Neu eintreffende VerbindungenBis zum Neustart nicht angenommenSchließt beim Stoppen den Port.Bearbeitet, sobald neue Kindprozesse laufenLässt den Port offen und bearbeitet sie, sobald neue Kindprozesse laufen.Nicht getrenntLässt den Port offen, sodass das Betriebssystem die Verbindungen warten lässt.
systemctl restart httpd hält Apache an und startet es danach neu, daher startet schon der Elternprozess neu, und in der Zwischenzeit werden keine neuen Verbindungen angenommen.
httpd -k restart sendet dem Elternprozess ein HUP-Signal und beendet die Kindprozesse sofort, sodass laufende Anfragen abbrechen.
systemctl reload httpd und apachectl graceful lassen den Elternprozess unverändert und ersetzen die Kindprozesse in der Reihenfolge, in der ihre Anfragen enden.

Diesen Unterschied haben wir an der Main PID geprüft. Obwohl reload jeden Tag lief, waren Main PID 741 und die Active-Zeit unverändert seit 11 Tagen, und die Nummern der Kindprozesse (2930111 usw.) folgten direkt auf 2930107 aus der Zeile [Process] des letzten reload.

systemctl reload httpd, apachectl graceful und httpd -k graceful sind alle dasselbe graceful. Unter AlmaLinux 9 sendet apachectl bei graceful mit systemctl kill ein SIGUSR1 an den Elternprozess, und auch apachectl -k graceful mit vorangestelltem -k lässt das -k weg und tut dasselbe.

graceful liest nur die Konfiguration neu ein und passt daher nicht nach einem Update des httpd-Pakets. Laut Manpage httpd.service ist reload nicht sicher, wenn ein aktualisiertes Modul eine Funktion nutzt, die es nur im neuen httpd gibt; deshalb startet das httpd-Paket Apache bei einem Update automatisch mit systemctl try-restart neu.

4️⃣ Syntax der Apache-Konfiguration prüfen

Auch wenn du Änderungen mit graceful ohne Verbindungsabbruch übernimmst, wechselt Apache nicht zur neuen Konfiguration, wenn eine Konfigurationsdatei einen Tippfehler enthält. Laut offizieller Apache-Dokumentation führen restart und graceful vorher eine Syntaxprüfung aus und geben bei einem Fehler nur die Fehlermeldung aus, ohne neu zu starten.

Prüfe deshalb nach dem Bearbeiten der Konfiguration zuerst die Syntax mit apachectl -t.

apachectl -t
Syntax OK

apachectl -t gab eine einzelne Zeile Syntax OK aus, und apachectl configtest lieferte dasselbe Ergebnis. Das apachectl der RHEL-Familie führt bei -t direkt httpd -t aus.

Die Prüfung einer Test-Konfigurationsdatei mit einem falsch geschriebenen Direktivennamen ergab statt Syntax OK den Fehler AH00526 samt Zeilennummer und der nicht erkannten Direktive ([Invalid command 'DirectoryIndx']), mit Exit-Code 1. Korrigiere die in der Fehlermeldung genannte Zeile und prüfe erneut.

systemctl reload httpd

Ist die Prüfung bestanden, übernimm die Konfiguration mit reload. Laut offizieller Apache-Dokumentation prüft die Syntaxprüfung nur die Syntax, daher kann das Übernehmen trotzdem scheitern. Prüfe nach reload noch einmal die Zeile [Active] von systemctl status und die Logs ganz unten.

🔲 Apache-Befehlssimulator

Auf dem virtuellen Server im Simulator unten kannst du systemctl-, apachectl- und httpd -k-Befehle selbst eingeben. Nach reload bleibt die Main PID gleich, und nur die Nummern der Kindprozesse ändern sich. Nach restart ändert sich sogar die Main PID.

Apache-Befehlssimulatorhttpd der RHEL-Familie
[root@server work]#
Mit den Tasten ↑↓ holst du zuvor eingegebene Befehle zurück.

🔢 FAQ & empfohlene Inhalte

Die Eingabe von apachectl fullstatus unter AlmaLinux 9 ergab einen Fehler, dass die Option fullstatus nicht unterstützt wird (not supported), mit Exit-Code 2. Das apachectl der RHEL-Familie ist ein Skript, das anstelle des von Apache mitgelieferten apachectl installiert ist, und nimmt daher nur start, stop, restart, status, graceful, graceful-stop, configtest, -t und -v an.

Laut Manpage httpd.service ist die Unit httpd standardmäßig deaktiviert (disabled), und preset: disabled in der Zeile [Loaded] von systemctl status ist dieser Standardwert. Wenn du systemctl enable httpd einmal ausführst, startet Apache bei jedem Booten, und mit --now bei enable startet es auch sofort.

Laut Manpage httpd.service startet der Dienst außerhalb von systemd, wenn du httpd direkt in einer root-Shell ausführst, und Standard-Sicherheitsbeschränkungen wie SELinux greifen nicht. Starte und stoppe den Dienst daher mit systemctl oder apachectl und nutze den Befehl httpd nur für Optionen, die den Dienst nicht starten, etwa die Syntaxprüfung -t.

ℹ️ Affiliate-Hinweis
Die Inhalte dieser Website enthalten Affiliate-Links. Kauft ein Besucher über einen dieser Links ein Produkt oder eine Dienstleistung, erhält die Website vom Verkäufer eine Provision. Der Betrag, den der Käufer zahlt(bei Aktionsrabatten sinkt er ↓), steigt dadurch nicht. Angegebene Preise, Rabatte und Lagerbestände entsprechen dem Stand bei Erstellung und können abweichen; prüfe sie daher vor dem Kauf beim Verkäufer. Produkte werden nach eigenen Kriterien ausgewählt und bewertet, und Provisionen beeinflussen weder die Reihenfolge noch den Inhalt der Bewertungen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Beweisen Sie, dass Sie ein Mensch sind: 9   +   7   =