Modul 6 · 6.1
Administrer tjenester med systemd
Modul 6: Tjenester og logs · Læsetid: 10 minutter
Læringsmål: Efter denne lektion kan du starte, stoppe og genindlæse tjenester og få dem til at starte ved opstart, læse status for en tjeneste og ændre en indstilling for en tjeneste sikkert med en drop-in.
Centrale begreber: systemd, unit, service, systemctl, start, stop, restart, reload, enable, disable, --now, active, inactive, failed, systemctl --failed, drop-in, systemctl edit, daemon-reload, Restart=
Hvem holder det hele kørende?
På en server kører der snesevis af programmer, som altid skal være der: SSH-serveren, webserveren, en database, tidssynkroniseringen. Sådanne programmer kaldes tjenester (services eller daemons). Nogen skal starte dem ved opstart, holde øje med dem og starte dem igen, hvis de går ned. På Debian, Ubuntu, AlmaLinux og Rocky Linux er det systemd, der gør det. Det er det første program, kernen starter (proces 1), og det starter derefter alt det andet.
systemd arbejder med units: beskrivelser af noget, det skal administrere. De vigtigste typer:
| Type | Endelse | Eksempel |
|---|---|---|
| Tjeneste | .service | nginx.service, ssh.service |
| Timer (planlagt opgave) | .timer | apt-daily.timer (lektion 4.2, lektion 6.3) |
| Socket | .socket | ssh.socket på Ubuntu 24.04 og senere |
| Mål (gruppe af units) | .target | multi-user.target |
Du taler med systemd via kommandoen systemctl. Endelsen .service kan du udelade: systemctl status nginx er det samme som systemctl status nginx.service.
Læs status
Den kommando, du bruger oftest:
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...Læs den oppefra og ned:
- Prikken foran navnet er grøn for en tjeneste, der kører, hvid for en stoppet og rød for en mislykket.
- Loaded fortæller, hvor unit-filen ligger, og om tjenesten starter ved opstart (
enabled) eller ej (disabled). - Active fortæller, om den kører nu (
active (running)), er stoppet (inactive (dead)) eller er mislykket (failed), og siden hvornår. - Main PID og CGroup viser, hvilke processer der hører til tjenesten.
- Nederst står de sidste linjer fra tjenestens log. Ofte står der allerede, hvorfor noget går galt; mere kan du læse med
journalctl(lektion 6.2).
Start, stop, genstart og genindlæs
anna@web1:~$ sudo systemctl start nginx # start nu
anna@web1:~$ sudo systemctl stop nginx # stop nu
anna@web1:~$ sudo systemctl restart nginx # stop og start igen
anna@web1:~$ sudo systemctl reload nginx # læs konfigurationen igen uden at stoppeForskellen mellem restart og reload er vigtig i praksis. Ved en restart stopper tjenesten kortvarigt: igangværende forbindelser afbrydes, og hvis den nye konfiguration indeholder en fejl, starter den ikke igen, og dit website er nede. Ved en reload læser tjenesten sin konfiguration igen, mens den bliver ved med at køre; ved en fejl i konfigurationen beholder nginx den gamle. Brug derfor reload for nginx, Caddy, SSH og fail2ban efter en ændring i konfigurationen, og test konfigurationen først (nginx -t, sshd -t, fail2ban-client -t). Ikke alle tjenester understøtter reload; systemctl reload-or-restart vælger selv.
Ved opstart: enable og disable
At starte og at "starte ved opstart" er to forskellige ting:
anna@web1:~$ sudo systemctl enable nginx # start fremover ved opstart
anna@web1:~$ sudo systemctl disable nginx # ikke længere ved opstart
anna@web1:~$ sudo systemctl enable --now nginx # begge dele: start nu og ved opstart
anna@web1:~$ systemctl is-enabled nginx
enabledEn klassisk fejl: Du starter en tjeneste med start, alt virker, og efter næste genstart (for eksempel på grund af en kerneopdatering, lektion 4.2) er den væk. Brug derfor enable --now til en ny tjeneste.
Vil du være sikker på, at en tjeneste aldrig starter, heller ikke hvis en anden tjeneste beder om det, findes der mask: sudo systemctl mask <dienst>. Du fortryder med unmask.
Hvad er galt?
Én kommando viser alle mislykkede units:
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.Gør det til en vane, for eksempel efter hver genstart og hver opgradering (lektion 4.3): listen skal være tom. Når problemet er løst, fjerner du meldingen med sudo systemctl reset-failed.
En oversigt over alle tjenester, der kører:
anna@web1:~$ systemctl list-units --type=service --state=runningKører der noget, du ikke kender eller ikke bruger, så find ud af, hvad det er. Hver tjeneste, der ikke er nødvendig, er unødig angrebsflade (lektion 5.1 og 10.1).
Unit-filer og drop-ins
En unit-fil er en tekstfil. Pakkens version ligger i /usr/lib/systemd/system/ (på ældre systemer /lib/systemd/system/). Den ændrer du aldrig: en opdatering af pakken overskriver den. Dine egne ændringer lægger du i en drop-in: en lille fil, der kun indeholder de linjer, du vil ændre. Det er nemmest med:
anna@web1:~$ sudo systemctl edit nginxDer åbner en editor med et tomt område mellem to kommentarlinjer. Det, du skriver der, havner i /etc/systemd/system/nginx.service.d/override.conf. For eksempel: genstart nginx automatisk, hvis den stopper uventet.
[Service]
Restart=on-failure
RestartSec=5sNår du gemmer, genindlæser systemctl edit automatisk systemd's konfiguration. Redigerer du en unit-fil på en anden måde, så kør selv:
anna@web1:~$ sudo systemctl daemon-reload
anna@web1:~$ sudo systemctl restart nginxdaemon-reload får systemd til at læse unit-filerne igen; selve tjenesten skal derefter genstartes for at bruge ændringen. Det samlede resultat (original plus drop-ins) ser du med systemctl cat nginx.
Restart=on-failure er en god vane for vigtige tjenester. Men skjul ikke en reel fejl med den: en tjeneste, der crasher og genstarter hvert femte sekund, skal undersøges i loggen. systemd holder op med at genstarte efter nogle hurtige fejl i træk (standardgrænsen er fem starter inden for ti sekunder) og sætter tjenesten til failed.
På AlmaLinux og Rocky Linux
systemd og systemctl virker præcis på samme måde. Kun tjenesternes navne er nogle gange forskellige: SSH-tjenesten hedder sshd, distributionens webserver hedder httpd (Apache) eller nginx, og firewallen firewalld.
I praksis
VPS-skærmen hos din udbyder (hos WebOké og andre steder) kan slukke hele serveren, genstarte den eller "tvinge den til at slukke". Det sidste svarer til at trække stikket ud: tjenesterne får ikke mulighed for at stoppe pænt, og en database kan blive beskadiget. Brug inde på serveren sudo systemctl reboot eller sudo shutdown -h now, og i panelet den almindelige knap til at lukke ned eller genstarte.
Opsummering
- systemd starter og overvåger alle tjenester; du styrer det med
systemctl. systemctl statusviser, om en tjeneste kører, om den starter ved opstart, og de seneste loglinjer.start/stop/restartgælder for nu,enable/disablefor opstart; brugenable --nowtil en ny tjeneste.- Efter en ændring i konfigurationen: test først, derefter
reload;systemctl --failedskal være tom. - Ændr aldrig en pakkes unit-fil, men brug en drop-in med
systemctl edit.
Quiz
Opgave
Opgave O6.1: Kortlæg dine tjenester. Lav på din server en liste over alle tjenester, der kører (systemctl list-units --type=service --state=running), og se, om systemctl --failed er tom. Angiv for hver tjeneste, hvad den gør, og om du har brug for den. Find ud af, hvad én tjeneste, du ikke kendte, er (systemctl status, man). Sæt derefter Restart=on-failure for én vigtig tjeneste i en drop-in, og kontrollér med systemctl cat, at den står der.
Opgave O6.1: Kortlæg dine tjenester
Denne opgave laver du selv; ingen tjekker den. Afkryds hvad du har gjort, og markér opgaven som udført.
En drop-in ligger i /etc/systemd/system/<naam>.service.d/override.conf, ikke i /usr/lib/systemd. Ved reload kører tjenesten videre, og ved en fejl beholder for eksempel nginx den gamle konfiguration; test på forhånd med nginx -t eller sshd -t. Overflødige tjenester: disable --now eller fjern pakken.
Dine afkrydsninger og noter forbliver kun i denne browser; vi sender dem ingen steder hen. Er du logget ind, gemmer vi kun i Mine kurser, at du har udført opgaven.
Læs mere
- Manual
systemctl(1): https://manpages.debian.org/trixie/systemd/systemctl.1.en.html - Manual
systemd.service(5)(Restart=): https://manpages.debian.org/trixie/systemd/systemd.service.5.en.html - Manual
systemd.unit(5)(drop-ins): https://manpages.debian.org/trixie/systemd/systemd.unit.5.en.html - Administrer tjenester med systemctl på din VPS
