Apache starten, stoppen, neu starten: Befehle und der Unterschied zu graceful
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.
| Aufgaben | RHEL-Familie (httpd) | Debian-Familie (apache2) |
|---|---|---|
| Starten | systemctl start httpd | systemctl start apache2 |
| Stoppen | systemctl stop httpd | systemctl stop apache2 |
| Neu starten | systemctl restart httpd | systemctl restart apache2 |
| Konfiguration neu laden (graceful) | systemctl reload httpd | systemctl reload apache2 |
| Status prüfen | systemctl status httpd | systemctl status apache2 |
| Beim Booten automatisch starten | systemctl enable httpd | systemctl 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 apache2Unit 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 httpdstart startet ein angehaltenes Apache. Ob es gestartet ist, prüfst du mit systemctl status.
systemctl stop httpdstop hält Apache an. Bis zum nächsten Start nimmt es keine Webanfragen an.
systemctl restart httpdrestart 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 80active (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 httpdactiveIm 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 httpdenabledenabled 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=mixedDie 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.
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 -tSyntax OKapachectl -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 httpdIst 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.
🔢 FAQ & empfohlene Inhalte
Apache · Fehler beim Neustart
Apache-Neustartfehler | (20014)Internal error: Error retrieving pid file logs/httpd.pid
Warum Befehle wie apachectl restart einen pid-Datei-Fehler melden und wie du eine leere httpd.pid aufräumst.
Apache · php-fpm
php-fpm max_children-Warnung: Vor dem Aufstocken der Worker die Ursache in den Logs finden
Ein Protokoll, wie wir auf einem WordPress-Server mit Nginx, Apache und php-fpm anhand der Logs die Ursache gehäufter max_children-Warnungen gefunden haben.
ℹ️ 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.