Gå direkte til indholdet

Cookieindstillinger

Vælg for hver type, hvilke cookies du tillader. Du kan altid ændre dit valg via Cookieindstillinger nederst på hver side. Privatlivspolitik

Nødvendige

Altid slået til

Nødvendige for at logge ind, gemme din kurv og huske dine valg. De er altid slået til.

Hvilke cookies?
  • weboke_sessie, weboke_klant, weboke_remember: din session og at forblive logget ind
  • weboke_basket: din kurv
  • wkBtwIncl: vise priser med eller uden moms
  • wok_cookies: dit cookievalg, 12 måneder

Måler, hvilken annonce der fører til et besøg eller en bestilling, så vi ikke betaler for annoncer, der ikke virker.

Hvilke cookies?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), op til 90 dage
  • OpenAI Ads, annoncer i ChatGPT
  • wok_aff: hvilken partner der henviste dig til os (affiliateprogram), 60 dage

4,6

Land og sprog

Hvert land har sin egen side med landets priser og moms.

Se

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:

TypeEndelseEksempel
Tjeneste.servicenginx.service, ssh.service
Timer (planlagt opgave).timerapt-daily.timer (lektion 4.2, lektion 6.3)
Socket.socketssh.socket på Ubuntu 24.04 og senere
Mål (gruppe af units).targetmulti-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 stoppe

Forskellen 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
enabled

En 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=running

Kø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 nginx

Der å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=5s

Nå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 nginx

daemon-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 status viser, om en tjeneste kører, om den starter ved opstart, og de seneste loglinjer.
  • start/stop/restart gælder for nu, enable/disable for opstart; brug enable --now til en ny tjeneste.
  • Efter en ændring i konfigurationen: test først, derefter reload; systemctl --failed skal være tom.
  • Ændr aldrig en pakkes unit-fil, men brug en drop-in med systemctl edit.

Quiz

1. Du har startet en ny tjeneste med systemctl start. Efter en genstart af serveren kører den ikke. Hvorfor?



2. Du har ændret konfigurationen af nginx. Hvad er den sikreste rækkefølge?



3. Hvor hører din egen ændring af en pakkes unit-fil hjemme?



4. systemctl status viser Loaded: loaded (...; disabled; ...) og Active: active (running). Hvad betyder det?



5. En tjeneste har Restart=on-failure og crasher med få sekunders mellemrum. Hvad er den rigtige brug af den indstilling?



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.




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

Et øjeblik…

Opsæt dine domæner

Angiv for hvert domæne navneserverne, tilknytningen til din hosting, og hvem der bliver ejer.

Indlæser dine domæner…