Direct naar de inhoud

Cookie-instellingen

Kies per soort welke cookies je toestaat. Je kunt je keuze altijd wijzigen via Cookie-instellingen onderaan elke pagina. Privacyverklaring

Noodzakelijk

Altijd aan

Nodig om in te loggen, je winkelwagen te bewaren en je keuzes te onthouden. Deze staan altijd aan.

Welke cookies?
  • weboke_sessie, weboke_klant, weboke_remember: je sessie en ingelogd blijven
  • weboke_basket: je winkelwagen
  • wkBtwIncl: prijzen met of zonder btw tonen
  • wok_cookies: je cookiekeuze, 12 maanden

Meet welke advertentie tot een bezoek of bestelling leidt, zodat we niet betalen voor advertenties die niets doen.

Welke cookies?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), tot 90 dagen
  • OpenAI Ads, advertenties in ChatGPT
  • wok_aff: via welke partner je bij ons kwam (affiliateprogramma), 60 dagen

4,6

Land en taal

Elk land heeft zijn eigen site, met prijzen en btw van dat land.

Bekijken

Module 6 · 6.1

Diensten beheren met systemd

Module 6: Diensten en logs · Leestijd: 10 minuten

Leerdoel: Na deze les kun je diensten starten, stoppen, herladen en bij het opstarten laten starten, de status van een dienst lezen, en een instelling van een dienst veilig aanpassen met een drop-in.

Kernbegrippen: systemd, unit, service, systemctl, start, stop, restart, reload, enable, disable, --now, active, inactive, failed, systemctl --failed, drop-in, systemctl edit, daemon-reload, Restart=

Wie houdt alles draaiende?

Op een server draaien tientallen programma's die er altijd moeten zijn: de SSH-server, de webserver, een database, de tijdsynchronisatie. Zulke programma's heten diensten (services, of daemons). Iemand moet ze bij het opstarten starten, in de gaten houden en opnieuw starten als ze omvallen. Op Debian, Ubuntu, AlmaLinux en Rocky Linux doet systemd dat. Het is het eerste programma dat de kernel start (proces 1), en het start daarna al het andere.

systemd werkt met units: beschrijvingen van iets wat het moet beheren. De belangrijkste soorten:

SoortExtensieVoorbeeld
Dienst.servicenginx.service, ssh.service
Timer (geplande taak).timerapt-daily.timer (les 4.2, les 6.3)
Socket.socketssh.socket op Ubuntu 24.04 en later
Doel (groep units).targetmulti-user.target

Je praat met systemd via het commando systemctl. De extensie .service mag je weglaten: systemctl status nginx is hetzelfde als systemctl status nginx.service.

De status lezen

Het commando dat je het vaakst gebruikt:

anna@web1:~$ systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)
     Active: active (running) since Mon 2026-11-09 08:12:44 CET; 3h 2min ago
       Docs: man:nginx(8)
    Process: 902 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 905 (nginx)
      Tasks: 3 (limit: 2275)
     Memory: 4.1M (peak: 6.3M)
        CPU: 213ms
     CGroup: /system.slice/nginx.service
             ├─905 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             └─906 "nginx: worker process"

nov 09 08:12:44 web1 systemd[1]: Starting nginx.service - A high performance web server...
nov 09 08:12:44 web1 systemd[1]: Started nginx.service - A high performance web server...

Lees het van boven naar beneden:

  • Het bolletje voor de naam is groen bij een draaiende dienst, wit bij een gestopte en rood bij een mislukte.
  • Loaded zegt waar het unit-bestand staat en of de dienst bij het opstarten start (enabled) of niet (disabled).
  • Active zegt of hij nu draait (active (running)), gestopt is (inactive (dead)) of mislukt is (failed), en sinds wanneer.
  • Main PID en CGroup laten zien welke processen bij de dienst horen.
  • Onderaan staan de laatste regels uit het logboek van de dienst. Vaak staat daar al waarom iets misgaat; meer lees je met journalctl (les 6.2).

Starten, stoppen, herstarten en herladen

anna@web1:~$ sudo systemctl start nginx      # nu starten
anna@web1:~$ sudo systemctl stop nginx       # nu stoppen
anna@web1:~$ sudo systemctl restart nginx    # stoppen en weer starten
anna@web1:~$ sudo systemctl reload nginx     # configuratie opnieuw lezen zonder te stoppen

Het verschil tussen restart en reload is in de praktijk belangrijk. Bij een restart stopt de dienst even: lopende verbindingen worden verbroken, en als de nieuwe configuratie een fout bevat, start hij niet meer en is je website plat. Bij een reload leest de dienst zijn configuratie opnieuw terwijl hij blijft draaien; bij een fout in de configuratie houdt nginx de oude aan. Gebruik voor nginx, Caddy, SSH en fail2ban na een configuratiewijziging dus reload, en test de configuratie eerst (nginx -t, sshd -t, fail2ban-client -t). Niet elke dienst kent reload; systemctl reload-or-restart kiest zelf.

Bij het opstarten: enable en disable

Starten en "bij het opstarten starten" zijn twee verschillende dingen:

anna@web1:~$ sudo systemctl enable nginx         # start voortaan bij het opstarten
anna@web1:~$ sudo systemctl disable nginx        # niet meer bij het opstarten
anna@web1:~$ sudo systemctl enable --now nginx   # allebei: nu starten én bij het opstarten
anna@web1:~$ systemctl is-enabled nginx
enabled

Een klassieke fout: je start een dienst met start, alles werkt, en na de volgende herstart (bijvoorbeeld door een kernelupdate, les 4.2) is hij weg. Gebruik voor een nieuwe dienst daarom enable --now.

Wil je zeker weten dat een dienst nooit start, ook niet als een andere dienst erom vraagt, dan is er mask: sudo systemctl mask <dienst>. Terugdraaien met unmask.

Wat is er mis?

Eén commando laat alle mislukte units zien:

anna@web1:~$ systemctl --failed
  UNIT                LOAD   ACTIVE SUB    DESCRIPTION
● php8.4-fpm.service  loaded failed failed The PHP 8.4 FastCGI Process Manager

1 loaded units listed.

Maak hier een gewoonte van, bijvoorbeeld na elke herstart en elke upgrade (les 4.3): de lijst hoort leeg te zijn. Na het oplossen haal je de melding weg met sudo systemctl reset-failed.

Een overzicht van alle draaiende diensten:

anna@web1:~$ systemctl list-units --type=service --state=running

Draait er iets wat je niet kent of niet gebruikt, zoek dan uit wat het is. Elke dienst die niet nodig is, is overbodig aanvalsoppervlak (les 5.1 en 10.1).

Unit-bestanden en drop-ins

Een unit-bestand is een tekstbestand. De versie van het pakket staat in /usr/lib/systemd/system/ (op oudere systemen /lib/systemd/system/). Die pas je nooit aan: een update van het pakket overschrijft hem. Eigen wijzigingen zet je in een drop-in: een klein bestand dat alleen de regels bevat die je wilt veranderen. Dat gaat het makkelijkst met:

anna@web1:~$ sudo systemctl edit nginx

Er opent een editor met een leeg stuk tussen twee commentaarregels. Wat je daar schrijft, komt in /etc/systemd/system/nginx.service.d/override.conf. Bijvoorbeeld: nginx automatisch opnieuw starten als hij onverwacht stopt.

[Service]
Restart=on-failure
RestartSec=5s

Na het opslaan herlaadt systemctl edit de configuratie van systemd vanzelf. Bewerk je een unit-bestand op een andere manier, doe dan zelf:

anna@web1:~$ sudo systemctl daemon-reload
anna@web1:~$ sudo systemctl restart nginx

daemon-reload laat systemd de unit-bestanden opnieuw lezen; de dienst zelf moet daarna nog opnieuw starten om de wijziging te gebruiken. Het volledige resultaat (origineel plus drop-ins) zie je met systemctl cat nginx.

Restart=on-failure is een goede gewoonte voor diensten die belangrijk zijn. Maar verstop er geen echte fout mee: een dienst die elke vijf seconden crasht en opnieuw start, hoort in het logboek opgezocht te worden. systemd stopt na een paar snelle mislukkingen achter elkaar met herstarten (de standaardgrens is vijf starts binnen tien seconden) en zet de dienst op failed.

Op AlmaLinux en Rocky Linux

systemd en systemctl werken precies hetzelfde. Alleen de namen van diensten verschillen soms: de SSH-dienst heet sshd, de webserver uit de distributie heet httpd (Apache) of nginx, en de firewall firewalld.

In de praktijk

Het VPS-scherm van je aanbieder (bij WebOké en elders) kan de hele server uitzetten, herstarten of "geforceerd uitzetten". Dat laatste is de stekker eruit: diensten krijgen geen kans om netjes te stoppen en een database kan dan beschadigd raken. Gebruik binnen de server sudo systemctl reboot of sudo shutdown -h now, en in het paneel de gewone knop afsluiten of herstarten.

Samenvatting

  • systemd start en bewaakt alle diensten; je bedient het met systemctl.
  • systemctl status laat zien of een dienst draait, of hij bij het opstarten start, en de laatste logregels.
  • start/stop/restart gelden voor nu, enable/disable voor het opstarten; gebruik enable --now voor een nieuwe dienst.
  • Na een configuratiewijziging: eerst testen, dan reload; systemctl --failed hoort leeg te zijn.
  • Pas nooit het unit-bestand van een pakket aan, maar gebruik een drop-in met systemctl edit.

Quiz

1. Je hebt een nieuwe dienst gestart met systemctl start. Na een herstart van de server draait hij niet. Waarom?



2. Je hebt de configuratie van nginx aangepast. Wat is de veiligste volgorde?



3. Waar hoort je eigen aanpassing aan het unit-bestand van een pakket?



4. systemctl status toont Loaded: loaded (...; disabled; ...) en Active: active (running). Wat betekent dat?



5. Een dienst heeft Restart=on-failure en crasht elke paar seconden. Wat is het goede gebruik van die instelling?



Opdracht

Opdracht O6.1: Je diensten in kaart. Maak op je server een lijst van alle draaiende diensten (systemctl list-units --type=service --state=running) en kijk of systemctl --failed leeg is. Geef van elke dienst aan wat hij doet en of je hem nodig hebt. Zoek van één dienst die je niet kende uit wat hij is (systemctl status, man). Zet daarna voor één belangrijke dienst Restart=on-failure in een drop-in en controleer met systemctl cat dat hij er staat.

Opdracht O6.1: Je diensten in kaart

Deze opdracht doe je zelf; niemand kijkt hem na. Vink af wat je gedaan hebt en markeer de opdracht als gedaan.




Je vinkjes en aantekeningen blijven alleen in deze browser; we sturen ze nergens heen. Ben je aangemeld, dan bewaren we in Mijn cursussen alleen dat je de opdracht gedaan hebt.

Verder lezen

Even geduld…

Stel je domeinen in

Regel per domein de nameservers, de koppeling aan je hosting en wie de eigenaar wordt.

Je domeinen laden…