Modul 6 · 6.1
Administrer tjenester med systemd
Modul 6: Tjenester og logger · Lesetid: 10 minutter
Læringsmål: Etter denne leksjonen kan du starte, stoppe og laste inn tjenester på nytt, la dem starte ved oppstart, lese statusen til en tjeneste og endre en innstilling for en tjeneste trygt med en drop-in.
Nøkkelbegreper: 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 alt i gang?
På en server kjører det dusinvis av programmer som alltid må være der: SSH-serveren, webserveren, en database, tidssynkroniseringen. Slike programmer kalles tjenester (services, eller daemons). Noen må starte dem ved oppstart, holde øye med dem og starte dem på nytt hvis de faller ut. På Debian, Ubuntu, AlmaLinux og Rocky Linux er det systemd som gjør dette. Det er det første programmet kjernen starter (prosess 1), og deretter starter det alt annet.
systemd jobber med units: beskrivelser av noe det skal administrere. De viktigste typene:
| Type | Filendelse | Eksempel |
|---|---|---|
| Tjeneste | .service | nginx.service, ssh.service |
| Timer (planlagt oppgave) | .timer | apt-daily.timer (leksjon 4.2, leksjon 6.3) |
| Socket | .socket | ssh.socket på Ubuntu 24.04 og nyere |
| Mål (gruppe units) | .target | multi-user.target |
Du snakker med systemd via kommandoen systemctl. Filendelsen .service kan du utelate: systemctl status nginx er det samme som systemctl status nginx.service.
Lese statusen
Kommandoen du bruker 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...Les den ovenfra og ned:
- Den lille prikken foran navnet er grønn for en tjeneste som kjører, hvit for en som er stoppet, og rød for en som har feilet.
- Loaded viser hvor unit-filen ligger, og om tjenesten starter ved oppstart (
enabled) eller ikke (disabled). - Active viser om den kjører nå (
active (running)), er stoppet (inactive (dead)) eller har feilet (failed), og siden når. - Main PID og CGroup viser hvilke prosesser som hører til tjenesten.
- Nederst står de siste linjene fra loggen til tjenesten. Ofte står det allerede der hvorfor noe går galt. Mer leser du med
journalctl(leksjon 6.2).
Starte, stoppe, starte på nytt og laste inn på nytt
anna@web1:~$ sudo systemctl start nginx # start nå
anna@web1:~$ sudo systemctl stop nginx # stopp nå
anna@web1:~$ sudo systemctl restart nginx # stopp og start igjen
anna@web1:~$ sudo systemctl reload nginx # les inn konfigurasjonen på nytt uten å stoppeForskjellen mellom restart og reload er viktig i praksis. Ved en restart stopper tjenesten en kort stund: pågående tilkoblinger brytes, og hvis den nye konfigurasjonen inneholder en feil, starter den ikke igjen, og nettstedet ditt er nede. Ved en reload leser tjenesten konfigurasjonen sin på nytt mens den fortsetter å kjøre. Ved en feil i konfigurasjonen beholder nginx den gamle. Bruk derfor reload for nginx, Caddy, SSH og fail2ban etter en konfigurasjonsendring, og test konfigurasjonen først (nginx -t, sshd -t, fail2ban-client -t). Ikke alle tjenester støtter reload. systemctl reload-or-restart velger selv.
Ved oppstart: enable og disable
Å starte og å "starte ved oppstart" er to forskjellige ting:
anna@web1:~$ sudo systemctl enable nginx # starter heretter ved oppstart
anna@web1:~$ sudo systemctl disable nginx # ikke lenger ved oppstart
anna@web1:~$ sudo systemctl enable --now nginx # begge deler: start nå og ved oppstart
anna@web1:~$ systemctl is-enabled nginx
enabledEn klassisk feil: Du starter en tjeneste med start, alt fungerer, og etter neste omstart (for eksempel på grunn av en kjerneoppdatering, leksjon 4.2) er den borte. Bruk derfor enable --now for en ny tjeneste.
Vil du være sikker på at en tjeneste aldri starter, heller ikke når en annen tjeneste ber om den, finnes mask: sudo systemctl mask <dienst>. Du angrer med unmask.
Hva er galt?
Én kommando viser alle units som har feilet:
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.Gjør dette til en vane, for eksempel etter hver omstart og hver oppgradering (leksjon 4.3): Listen skal være tom. Når du har løst problemet, fjerner du meldingen med sudo systemctl reset-failed.
En oversikt over alle tjenester som kjører:
anna@web1:~$ systemctl list-units --type=service --state=runningKjører det noe du ikke kjenner eller ikke bruker, finn ut hva det er. Hver tjeneste som ikke trengs, er unødvendig angrepsflate (leksjon 5.1 og 10.1).
Unit-filer og drop-ins
En unit-fil er en tekstfil. Versjonen fra pakken ligger i /usr/lib/systemd/system/ (på eldre systemer /lib/systemd/system/). Den endrer du aldri: En oppdatering av pakken overskriver den. Egne endringer legger du i en drop-in: en liten fil som bare inneholder linjene du vil endre. Det gjør du enklest med:
anna@web1:~$ sudo systemctl edit nginxDet åpnes en editor med et tomt felt mellom to kommentarlinjer. Det du skriver der, havner i /etc/systemd/system/nginx.service.d/override.conf. For eksempel: start nginx automatisk på nytt hvis den stopper uventet.
[Service]
Restart=on-failure
RestartSec=5sEtter at du har lagret, laster systemctl edit systemd-konfigurasjonen inn på nytt av seg selv. Redigerer du en unit-fil på en annen måte, gjør du dette selv:
anna@web1:~$ sudo systemctl daemon-reload
anna@web1:~$ sudo systemctl restart nginxdaemon-reload får systemd til å lese unit-filene på nytt. Selve tjenesten må deretter startes på nytt for å bruke endringen. Hele resultatet (originalen pluss drop-ins) ser du med systemctl cat nginx.
Restart=on-failure er en god vane for viktige tjenester. Men ikke skjul en reell feil med det: En tjeneste som krasjer og starter på nytt hvert femte sekund, bør undersøkes i loggen. systemd slutter å starte på nytt etter noen raske feil på rad (standardgrensen er fem starter innen ti sekunder) og setter tjenesten til failed.
På AlmaLinux og Rocky Linux
systemd og systemctl fungerer nøyaktig likt. Bare navnene på tjenestene er noen ganger forskjellige: SSH-tjenesten heter sshd, webserveren fra distribusjonen heter httpd (Apache) eller nginx, og brannmuren firewalld.
I praksis
VPS-panelet hos leverandøren din (hos WebOké og andre) kan slå av hele serveren, starte den på nytt eller "tvinge avslåing". Det siste tilsvarer å dra ut kontakten: Tjenestene får ikke mulighet til å stoppe ordentlig, og en database kan bli skadet. Bruk sudo systemctl reboot eller sudo shutdown -h now inne på serveren, og den vanlige knappen for å slå av eller starte på nytt i panelet.
Sammendrag
- systemd starter og overvåker alle tjenester. Du styrer det med
systemctl. systemctl statusviser om en tjeneste kjører, om den starter ved oppstart, og de siste logglinjene.start/stop/restartgjelder for nå,enable/disablefor oppstart. Brukenable --nowfor en ny tjeneste.- Etter en konfigurasjonsendring: test først, deretter
reload.systemctl --failedskal være tom. - Endre aldri unit-filen til en pakke, men bruk en drop-in med
systemctl edit.
Quiz
Oppgave
Oppgave O6.1: Kartlegg tjenestene dine. Lag en liste over alle tjenester som kjører på serveren din (systemctl list-units --type=service --state=running), og sjekk om systemctl --failed er tom. Skriv for hver tjeneste hva den gjør og om du trenger den. Finn ut hva én tjeneste du ikke kjente til er (systemctl status, man). Sett deretter Restart=on-failure i en drop-in for én viktig tjeneste, og kontroller med systemctl cat at den står der.
Oppgave O6.1: Kartlegg tjenestene dine
Denne oppgaven gjør du selv; ingen kontrollerer den. Kryss av det du har gjort, og merk oppgaven som fullført.
En drop-in ligger i /etc/systemd/system/<naam>.service.d/override.conf, ikke i /usr/lib/systemd. Ved reload fortsetter tjenesten å kjøre, og for eksempel nginx beholder den gamle konfigurasjonen ved en feil; test på forhånd med nginx -t eller sshd -t. Unødvendige tjenester: disable --now eller fjern pakken.
Avkrysningene og notatene dine blir kun i denne nettleseren; vi sender dem ikke noe sted. Er du logget inn, lagrer vi kun i Mine kurs at du har gjort oppgaven.
Les mer
- Manual for
systemctl(1): https://manpages.debian.org/trixie/systemd/systemctl.1.en.html - Manual for
systemd.service(5)(Restart=): https://manpages.debian.org/trixie/systemd/systemd.service.5.en.html - Manual for
systemd.unit(5)(drop-ins): https://manpages.debian.org/trixie/systemd/systemd.unit.5.en.html
