Apache starten, stoppen en herstarten: commando's en het verschil met graceful
Op een Linux-server start, stop en herstart je Apache met het commando systemctl; de servicenaam is httpd in de RHEL-familie en apache2 in de Debian-familie. Na het lezen van de uitvoer van systemctl status, het unitbestand van httpd en het script apachectl op een AlmaLinux 9-server bleek dat restart Apache stopt en weer opstart, terwijl graceful het ouderproces laat staan en alleen de configuratie opnieuw inleest.
Omdat stoppen en herstarten de service echt stilleggen, hebben we start, stop en restart niet op de testserver uitgevoerd. In plaats daarvan hebben we het gedrag gecontroleerd met de officiële Apache-documentatie, de handleiding van httpd.service en de reload-regels die op de server stonden. Hostnaam, poortnummer, tijden en aantallen verzoeken in de uitvoer hieronder zijn voorbeeldwaarden.
1️⃣ Commando's om Apache te starten, stoppen en herstarten
De servicenaam van Apache verschilt per distributiefamilie. De RHEL-familie, zoals RHEL, AlmaLinux en Rocky Linux, registreert hem in systemd als httpd, Ubuntu en Debian als apache2.
| Taak | RHEL-familie (httpd) | Debian-familie (apache2) |
|---|---|---|
| Starten | systemctl start httpd | systemctl start apache2 |
| Stoppen | systemctl stop httpd | systemctl stop apache2 |
| Herstarten | systemctl restart httpd | systemctl restart apache2 |
| Configuratie opnieuw laden (graceful) | systemctl reload httpd | systemctl reload apache2 |
| Status bekijken | systemctl status httpd | systemctl status apache2 |
| Automatisch starten bij het opstarten | systemctl enable httpd | systemctl enable apache2 |
Voer de commando's in de tabel uit als root. Met een gewone account zet je sudo voor het commando.
Als je de families door elkaar haalt en de andere naam gebruikt, wordt het commando niet uitgevoerd. Toen we op een server uit de RHEL-familie de status opvroegen met apache2, kwam er een fout dat de unit niet gevonden werd.
systemctl status apache2Unit apache2.service could not be found.De exitcode was 4, en toen we op dezelfde server de naam in httpd veranderden, kwam er normale uitvoer.
In de RHEL-familie start, stop en herstart je Apache met de drie commando's hieronder.
systemctl start httpdstart start een gestopte Apache. Of hij gestart is, controleer je met systemctl status.
systemctl stop httpdstop stopt Apache. Tot je hem weer start, neemt hij geen webverzoeken aan.
systemctl restart httpdrestart voert stop en start na elkaar uit. Heb je alleen configuratiebestanden gewijzigd, pas ze dan toe met reload (graceful), dat geen verbindingen verbreekt.
Op AlmaLinux 9 is apachectl een shellscript dat in plaats van de apachectl van Apache zelf is geïnstalleerd. Het geeft start, stop, restart en status direct door aan systemctl, dus apachectl restart en systemctl restart httpd doen hetzelfde.
2️⃣ Status van de Apache-service bekijken
Of Apache nu draait en wanneer hij gestart is, bekijk je met 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) op de regel [Active] betekent dat hij nu draait, en de tijd na since is het moment van starten. Deze server was 11 dagen eerder gestart en sindsdien nooit gestopt, en [Main PID] 741 was het ouderproces dat toen startte.
In [CGroup] staan onder 741 de kindprocessen die de verzoeken echt afhandelen (zie Processen). De regel [Status] toont het aantal tot nu toe afgehandelde verzoeken en het aantal vrije en bezette workers.
De drie logregels onderaan de uitvoer waren reload-regels die één keer per dag op hetzelfde tijdstip ontstonden: het hulpmiddel logrotate, dat logs per datum opsplitst, voerde na de rotatie systemctl reload httpd uit, en ook de handleiding van httpd.service zegt dat httpd na logrotate een reload krijgt.
In scripts en controlecommando's gebruik je is-active en is-enabled, die maar één woord uitvoeren.
systemctl is-active httpdactiveTerwijl hij draaide, kwamen active en exitcode 0. Zelfs met apache2, dat niet op de server bestaat, kwamen inactive en exitcode 3, net als bij een gestopte service; controleer in scripts dus eerst of de servicenaam klopt.
systemctl is-enabled httpdenabledenabled betekent dat Apache zo is geregistreerd dat hij bij het opstarten automatisch start.
3️⃣ Verschil tussen Apache herstarten en graceful
restart en graceful (reload) gaan verschillend om met lopende verzoeken en het ouderproces. Dat verschil hebben we eerst bekeken in de regels van het unitbestand van httpd die voor reload en stop gelden.
systemctl cat httpd | grep -E "Exec|Kill"ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
KillSignal=SIGWINCH
KillMode=mixedDe regel ExecReload betekent dat reload httpd -k graceful uitvoert, en de regel KillSignal betekent dat bij stop het signaal SIGWINCH (graceful-stop) wordt gestuurd.
Daarom stopt systemctl restart httpd Apache met graceful-stop en start hem daarna opnieuw. Lopende verzoeken worden eerst afgemaakt, maar het ouderproces zelf start opnieuw, dus het nummer bij [Main PID] verandert. Tussen stoppen en starten is de poort dicht en worden nieuwe verbindingen niet aangenomen. Ook het unitbestand apache2.service uit het Debian-pakket voert bij het stoppen apachectl graceful-stop uit.
httpd -k restart stuurt een HUP-signaal naar het ouderproces. Volgens de officiële Apache-documentatie blijft het ouderproces staan, maar worden de kindprocessen meteen beëindigd, zodat lopende verzoeken worden afgebroken en ook de verzoekstatistieken naar 0 gaan.
graceful stuurt een USR1-signaal naar het ouderproces. Het ouderproces leest de configuratiebestanden opnieuw in, en elk kindproces wordt vervangen door een kind met de nieuwe configuratie zodra het zijn lopende verzoek heeft afgemaakt. Verbindingen die in de tussentijd binnenkomen, laat het besturingssysteem wachten, zodat ze niet verloren gaan.
Het is als een winkel die open blijft terwijl elke kassamedewerker, na de klant te hebben geholpen, het stokje overdraagt aan een collega van het nieuwe rooster.
Dit verschil hebben we met de Main PID gecontroleerd. Hoewel reload elke dag draaide, waren Main PID 741 en de Active-tijd nog dezelfde als 11 dagen eerder, en de nummers van de kindprocessen (2930111 enz.) volgden direct op 2930107 in de regel [Process] van de laatste reload.
systemctl reload httpd, apachectl graceful en httpd -k graceful zijn allemaal dezelfde graceful. Op AlmaLinux 9 stuurt apachectl bij graceful met systemctl kill een SIGUSR1 naar het ouderproces, en ook apachectl -k graceful, met -k ervoor, laat de -k weg en doet hetzelfde.
graceful leest alleen de configuratie opnieuw in en past dus niet na een update van het httpd-pakket. Volgens de handleiding van httpd.service is reload niet veilig als een bijgewerkte module een functie gebruikt die alleen in de nieuwe httpd bestaat; daarom herstart het httpd-pakket Apache bij een update automatisch met systemctl try-restart.
4️⃣ Syntaxis van de Apache-configuratie controleren
Ook als je wijzigingen met graceful toepast zonder verbindingen te verbreken, schakelt Apache niet over op de nieuwe configuratie als een configuratiebestand een typfout bevat. Volgens de officiële Apache-documentatie doen restart en graceful eerst een syntaxiscontrole en geven ze bij een fout alleen de foutmelding, zonder te herstarten.
Controleer daarom na het aanpassen van de configuratie eerst de syntaxis met apachectl -t.
apachectl -tSyntax OKapachectl -t gaf één regel Syntax OK, en apachectl configtest gaf hetzelfde resultaat. De apachectl van de RHEL-familie voert bij -t gewoon httpd -t uit.
Een controle van een testconfiguratiebestand met één verkeerd gespelde directivenaam gaf in plaats van Syntax OK de fout AH00526, met het regelnummer en de directive die niet werd herkend ([Invalid command 'DirectoryIndx']), en exitcode 1. Verbeter de regel uit de foutmelding en controleer opnieuw.
systemctl reload httpdSlaagt de controle, pas de configuratie dan toe met reload. Volgens de officiële Apache-documentatie kijkt de syntaxiscontrole alleen naar de syntaxis, dus het toepassen kan ook na een geslaagde controle mislukken. Controleer na reload nog eens de regel [Active] van systemctl status en de logs onderaan.
🔲 Apache-commandosimulator
Op de virtuele server in de simulator hieronder kun je zelf systemctl-, apachectl- en httpd -k-commando's invoeren. Na reload blijft de Main PID hetzelfde en veranderen alleen de nummers van de kindprocessen. Na restart krijgt zelfs de Main PID een nieuw nummer.
🔢 FAQ & aanbevolen content
Apache · Fout bij herstarten
Apache-herstartfout | (20014)Internal error: Error retrieving pid file logs/httpd.pid
Waarom commando's als apachectl restart een fout met het pid-bestand geven, en de stappen om een lege httpd.pid op te ruimen.
Apache · php-fpm
php-fpm max_children-waarschuwing: zoek de oorzaak in de logs voordat je workers bijzet
Een verslag van hoe we met de logs vonden waarom max_children-waarschuwingen zich opstapelden op een WordPress-server met Nginx, Apache en php-fpm.
ℹ️ Affiliatemelding
De content van deze site bevat affiliatelinks. Koopt een bezoeker via een van deze links een product of dienst, dan ontvangt deze site een commissie van de verkoper. Het bedrag dat de koper betaalt (bij acties gaat het omlaag ↓) wordt daardoor niet hoger. De vermelde prijzen, kortingen en voorraad gelden op het moment van schrijven en kunnen afwijken; controleer ze daarom vóór je aankoop bij de verkoper. Producten worden gekozen en beoordeeld volgens onze eigen criteria, en commissies hebben geen invloed op de volgorde of de inhoud van de beoordelingen.