Apache starten, stoppen en herstarten: commando's en het verschil met graceful

TestomgevingRHEL-familieAlmaLinux 9.8root-accountGecontroleerd op 2026-10-29

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.

TaakRHEL-familie (httpd)Debian-familie (apache2)
Startensystemctl start httpdsystemctl start apache2
Stoppensystemctl stop httpdsystemctl stop apache2
Herstartensystemctl restart httpdsystemctl restart apache2
Configuratie opnieuw laden (graceful)systemctl reload httpdsystemctl reload apache2
Status bekijkensystemctl status httpdsystemctl status apache2
Automatisch starten bij het opstartensystemctl enable httpdsystemctl 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 apache2
Unit 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 httpd

start start een gestopte Apache. Of hij gestart is, controleer je met systemctl status.

systemctl stop httpd

stop stopt Apache. Tot je hem weer start, neemt hij geen webverzoeken aan.

systemctl restart httpd

restart 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 80

active (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 httpd
active

Terwijl 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 httpd
enabled

enabled 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=mixed

De 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.

🔁 Wat er verandert bij de drie manieren om Apache te herstarten
Uitlegdiagram
🔁 Commando
$ systemctl restart httpdhttpd -k restartsystemctl reload httpd
① Ouderproces (Main PID)Stopt en start opnieuwHet nummer van de Main PID verandert.ongewijzigdKrijgt het HUP-signaal en leest de configuratiebestanden opnieuw in.ongewijzigdKrijgt het USR1-signaal en leest de configuratiebestanden opnieuw in.
② Lopende verzoekenEerst afgemaakt, dan gestoptHet stoppen gebeurt met graceful-stop (WINCH), dus lopende verzoeken worden afgemaakt.Meteen afgebrokenBeëindigt de kindprocessen meteen en start nieuwe kinderen.Tot het einde afgehandeldElk kind wordt na zijn verzoek vervangen door een kind met de nieuwe configuratie.
③ Nieuwe verbindingenNiet aangenomen tot hij weer draaitSluit de poort bij het stoppen.Afgehandeld zodra nieuwe kinderen draaienLaat de poort open en handelt ze af zodra nieuwe kinderen draaien.Niet verbrokenLaat de poort open zodat het besturingssysteem de verbindingen laat wachten.
systemctl restart httpd stopt Apache en start hem daarna opnieuw, dus het ouderproces zelf start opnieuw en in de tussentijd worden geen nieuwe verbindingen aangenomen.
httpd -k restart stuurt een HUP-signaal naar het ouderproces en beëindigt de kindprocessen meteen, zodat lopende verzoeken worden afgebroken.
systemctl reload httpd en apachectl graceful laten het ouderproces staan en vervangen de kindprocessen in de volgorde waarin hun verzoeken klaar zijn.

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 -t
Syntax OK

apachectl -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 httpd

Slaagt 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.

Apache-commandosimulatorhttpd RHEL-familie
[root@server work]#
Met de toetsen ↑↓ haal je eerder ingetypte commando's terug.

🔢 FAQ & aanbevolen content

Toen we op AlmaLinux 9 apachectl fullstatus invoerden, kwam er een fout dat de optie fullstatus niet wordt ondersteund (not supported), met exitcode 2. De apachectl van de RHEL-familie is een script dat in plaats van de apachectl van Apache zelf is geïnstalleerd, en accepteert daarom alleen start, stop, restart, status, graceful, graceful-stop, configtest, -t en -v.

Volgens de handleiding van httpd.service staat de unit httpd standaard uit (disabled), en preset: disabled op de regel [Loaded] van systemctl status is die standaardwaarde. Voer je systemctl enable httpd één keer uit, dan start Apache bij elke opstart, en met --now bij enable start hij ook meteen.

Volgens de handleiding van httpd.service start de service buiten systemd als je httpd direct in een root-shell uitvoert, en worden standaard beveiligingsbeperkingen zoals SELinux niet toegepast. Start en stop de service dus met systemctl of apachectl, en gebruik het commando httpd alleen voor opties die de service niet starten, zoals de syntaxiscontrole -t.

ℹ️ 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.

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Laat zien dat je geen machine bent: 4   +   7   =