Hoppa till innehållet

Cookieinställningar

Välj vilka typer av cookies du tillåter. Du kan alltid ändra ditt val via Cookieinställningar längst ned på varje sida. Integritetspolicy

Nödvändiga

Alltid på

Behövs för att logga in, spara din varukorg och komma ihåg dina val. De är alltid på.

Vilka cookies?
  • weboke_sessie, weboke_klant, weboke_remember: din session och att du förblir inloggad
  • weboke_basket: din varukorg
  • wkBtwIncl: visa priser med eller utan moms
  • wok_cookies: ditt cookieval, 12 månader

Mäter vilken annons som leder till ett besök eller en beställning, så att vi inte betalar för annonser som inte ger något.

Vilka cookies?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), upp till 90 dagar
  • OpenAI Ads, annonser i ChatGPT
  • wok_aff: via vilken partner du kom till oss (affiliateprogram), 60 dagar

4,6

Land och språk

Varje land har en egen webbplats med landets priser och moms.

Visa

Hantera tjänster med systemd

Modul 6: Tjänster och loggar · Lästid: 10 minuter

Lärandemål: Efter den här lektionen kan du starta, stoppa och ladda om tjänster och låta dem starta vid uppstart, läsa statusen för en tjänst och ändra en inställning för en tjänst på ett säkert sätt med en drop-in.

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

Vem håller allt igång?

På en server körs dussintals program som alltid måste finnas där: SSH-servern, webbservern, en databas, tidssynkroniseringen. Sådana program kallas tjänster (services, eller daemons). Någon måste starta dem vid uppstart, hålla koll på dem och starta om dem när de kraschar. På Debian, Ubuntu, AlmaLinux och Rocky Linux gör systemd det. Det är det första programmet som kärnan startar (process 1), och sedan startar det allt annat.

systemd arbetar med units: beskrivningar av något som det ska hantera. De viktigaste typerna:

TypFiländelseExempel
Tjänst.servicenginx.service, ssh.service
Timer (schemalagd uppgift).timerapt-daily.timer (lektion 4.2, lektion 6.3)
Socket.socketssh.socket på Ubuntu 24.04 och senare
Mål (grupp av units).targetmulti-user.target

Du pratar med systemd via kommandot systemctl. Filändelsen .service kan du utelämna: systemctl status nginx är samma sak som systemctl status nginx.service.

Läsa statusen

Kommandot som du använder oftast:

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 det uppifrån och ned:

  • Pricken framför namnet är grön för en tjänst som körs, vit för en som är stoppad och röd för en som har misslyckats.
  • Loaded visar var unit-filen finns och om tjänsten startar vid uppstart (enabled) eller inte (disabled).
  • Active visar om den körs just nu (active (running)), är stoppad (inactive (dead)) eller har misslyckats (failed), och sedan när.
  • Main PID och CGroup visar vilka processer som hör till tjänsten.
  • Längst ned står de senaste raderna ur tjänstens logg. Där står ofta redan varför något går fel; mer läser du med journalctl (lektion 6.2).

Starta, stoppa, starta om och ladda om

anna@web1:~$ sudo systemctl start nginx      # starta nu
anna@web1:~$ sudo systemctl stop nginx       # stoppa nu
anna@web1:~$ sudo systemctl restart nginx    # stoppa och starta igen
anna@web1:~$ sudo systemctl reload nginx     # läs in konfigurationen igen utan att stoppa

Skillnaden mellan restart och reload är viktig i praktiken. Vid en restart stoppas tjänsten en kort stund: pågående anslutningar bryts, och om den nya konfigurationen innehåller ett fel startar den inte igen och din webbplats ligger nere. Vid en reload läser tjänsten in sin konfiguration på nytt medan den fortsätter att köras; vid ett fel i konfigurationen behåller nginx den gamla. Använd därför reload för nginx, Caddy, SSH och fail2ban efter en konfigurationsändring, och testa konfigurationen först (nginx -t, sshd -t, fail2ban-client -t). Alla tjänster har inte stöd för reload; systemctl reload-or-restart väljer själv.

Vid uppstart: enable och disable

Att starta och att "starta vid uppstart" är två olika saker:

anna@web1:~$ sudo systemctl enable nginx         # startar hädanefter vid uppstart
anna@web1:~$ sudo systemctl disable nginx        # inte längre vid uppstart
anna@web1:~$ sudo systemctl enable --now nginx   # båda: starta nu och vid uppstart
anna@web1:~$ systemctl is-enabled nginx
enabled

Ett klassiskt misstag: du startar en tjänst med start, allt fungerar, och efter nästa omstart (till exempel på grund av en kärnuppdatering, lektion 4.2) är den borta. Använd därför enable --now för en ny tjänst.

Vill du vara säker på att en tjänst aldrig startar, inte ens om en annan tjänst begär det, finns mask: sudo systemctl mask <dienst>. Ångra med unmask.

Vad är fel?

Ett enda kommando visar alla units som har misslyckats:

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 till en vana, till exempel efter varje omstart och varje uppgradering (lektion 4.3): listan ska vara tom. När du har löst problemet tar du bort meddelandet med sudo systemctl reset-failed.

En översikt över alla tjänster som körs:

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

Körs det något som du inte känner igen eller inte använder, ta då reda på vad det är. Varje tjänst som inte behövs är onödig attackyta (lektion 5.1 och 10.1).

Unit-filer och drop-ins

En unit-fil är en textfil. Paketets version finns i /usr/lib/systemd/system/ (på äldre system /lib/systemd/system/). Den ändrar du aldrig: en uppdatering av paketet skriver över den. Egna ändringar lägger du i en drop-in: en liten fil som bara innehåller de rader som du vill ändra. Det går enklast med:

anna@web1:~$ sudo systemctl edit nginx

En editor öppnas med ett tomt utrymme mellan två kommentarsrader. Det du skriver där hamnar i /etc/systemd/system/nginx.service.d/override.conf. Till exempel: starta om nginx automatiskt om den stoppar oväntat.

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

När du sparar laddar systemctl edit om systemds konfiguration automatiskt. Redigerar du en unit-fil på något annat sätt, kör då själv:

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

daemon-reload får systemd att läsa in unit-filerna på nytt; själva tjänsten måste sedan fortfarande startas om för att använda ändringen. Hela resultatet (originalet plus drop-ins) ser du med systemctl cat nginx.

Restart=on-failure är en bra vana för viktiga tjänster. Men dölj inte ett verkligt fel med den: en tjänst som kraschar och startar om var femte sekund ska undersökas i loggen. systemd slutar starta om efter några snabba misslyckanden i följd (standardgränsen är fem starter inom tio sekunder) och sätter tjänsten till failed.

På AlmaLinux och Rocky Linux

systemd och systemctl fungerar precis likadant. Bara tjänsternas namn skiljer sig ibland: SSH-tjänsten heter sshd, distributionens webbserver heter httpd (Apache) eller nginx, och brandväggen firewalld.

I praktiken

VPS-panelen hos din leverantör (hos WebOké och andra) kan stänga av hela servern, starta om den eller "tvinga avstängning". Det sista motsvarar att dra ur sladden: tjänsterna får ingen chans att stoppa ordentligt och en databas kan då skadas. Använd sudo systemctl reboot eller sudo shutdown -h now inne på servern, och i panelen den vanliga knappen för avstängning eller omstart.

Sammanfattning

  • systemd startar och övervakar alla tjänster; du styr det med systemctl.
  • systemctl status visar om en tjänst körs, om den startar vid uppstart och de senaste loggraderna.
  • start/stop/restart gäller för stunden, enable/disable för uppstarten; använd enable --now för en ny tjänst.
  • Efter en konfigurationsändring: testa först, sedan reload; systemctl --failed ska vara tom.
  • Ändra aldrig ett pakets unit-fil, utan använd en drop-in med systemctl edit.

Quiz

1. Du har startat en ny tjänst med systemctl start. Efter en omstart av servern körs den inte. Varför?



2. Du har ändrat konfigurationen för nginx. Vilken ordning är säkrast?



3. Var hör din egen ändring av ett pakets unit-fil hemma?



4. systemctl status visar Loaded: loaded (...; disabled; ...) och Active: active (running). Vad betyder det?



5. En tjänst har Restart=on-failure och kraschar med några sekunders mellanrum. Hur används den inställningen rätt?



Uppgift

Uppgift O6.1: Kartlägg dina tjänster. Gör en lista på din server över alla tjänster som körs (systemctl list-units --type=service --state=running) och kontrollera om systemctl --failed är tom. Ange för varje tjänst vad den gör och om du behöver den. Ta reda på vad en tjänst som du inte kände till är (systemctl status, man). Lägg sedan in Restart=on-failure i en drop-in för en viktig tjänst och kontrollera med systemctl cat att den finns där.

Uppgift O6.1: Kartlägg dina tjänster

Den här uppgiften gör du själv; ingen kontrollerar den. Bocka av vad du har gjort och markera uppgiften som klar.




Dina bockar och anteckningar sparas bara i den här webbläsaren; vi skickar dem ingenstans. Är du inloggad sparar vi i Mina kurser bara att du har gjort uppgiften.

Läs mer

Ett ögonblick…

Ställ in dina domäner

Ställ in namnservrar, koppling till ditt webbhotell och vem som blir innehavare för varje domän.

Hämtar dina domäner…