Ubuntu logo

Tjenester i Linux

Administrere systemtjenester med systemd

Grunnleggende om systemd

Systemd er init-systemet og tjenesteadministratoren i moderne Linux-distribusjoner. Det håndterer oppstart av tjenester og avhengigheter mellom dem.

Viktig: Systemd bruker enheter (units) for å håndtere tjenester, socketer, enheter og andre systemressurser.

Administrere systemtjenester

For å starte, stoppe eller sjekke status på en tjeneste bruker vi systemctl. Her er et eksempel med nginx-tjenesten:
$ systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2025-02-12 05:43:10 CET; 39s ago
       Docs: man:nginx(8)
   Main PID: 12345 (nginx)
      Tasks: 3 (limit: 4915)
     Memory: 3.8M
        CPU: 89ms
     CGroup: /system.slice/nginx.service
             ├─12345 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             ├─12346 "nginx: worker process" ssl-params
             └─12347 "nginx: worker process" ssl-params

$ sudo systemctl stop nginx
$ systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: inactive (dead) since Wed 2025-02-12 05:43:55 CET; 2s ago

$ sudo systemctl start nginx
$ systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2025-02-12 05:44:00 CET; 1s ago
For å laste inn konfigurasjonsfiler på nytt uten å starte tjenesten på nytt, bruker vi reload. Dette er nyttig når du har gjort endringer i konfigurasjonsfiler:
$ sudo systemctl reload nginx
$ systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2025-02-12 05:44:00 CET; 15s ago
    Process: 12350 ExecReload=/usr/sbin/nginx -s reload (code=exited, status=0/SUCCESS)

Autostart og tjenestestatus

For å se hvilke tjenester som er aktive og hvilke som er konfigurert til å starte ved oppstart:
$ systemctl list-units --type=service --state=active
UNIT                        LOAD   ACTIVE SUB     DESCRIPTION
apache2.service            loaded active running The Apache HTTP Server
mysql.service             loaded active running MySQL Database Server
nginx.service             loaded active running A high performance web server
ssh.service              loaded active running OpenSSH server daemon
systemd-journald.service  loaded active running Journal Service
[...]

$ systemctl list-unit-files --type=service --state=enabled
UNIT FILE                  STATE           VENDOR PRESET
apache2.service           enabled         enabled
mysql.service            enabled         enabled
nginx.service            enabled         enabled
ssh.service             enabled         enabled
[...]
For å aktivere eller deaktivere automatisk oppstart av en tjeneste:
$ sudo systemctl enable nginx
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /lib/systemd/system/nginx.service

$ sudo systemctl disable nginx
Removed /etc/systemd/system/multi-user.target.wants/nginx.service

$ systemctl is-enabled nginx
disabled

Systemd journal og feilsøking

Systemd har et kraftig loggsystem kalt journald. Her er hvordan du kan se og filtrere logger:
$ journalctl -u nginx --since today
Feb 12 05:43:10 server systemd[1]: Started A high performance web server and a reverse proxy server.
Feb 12 05:43:10 server nginx[12345]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
Feb 12 05:43:10 server nginx[12345]: nginx: configuration file /etc/nginx/nginx.conf test is successful
Feb 12 05:43:55 server systemd[1]: Stopping A high performance web server and a reverse proxy server...
Feb 12 05:43:55 server systemd[1]: nginx.service: Deactivated successfully.
Feb 12 05:44:00 server systemd[1]: Started A high performance web server and a reverse proxy server.

$ journalctl -f -u nginx
-- Logs begin at Wed 2025-02-12 05:43:10 CET. --
Feb 12 05:44:15 server nginx[12345]: 192.168.1.100 - - [12/Feb/2025:05:44:15 +0100] "GET / HTTP/1.1" 200 612
Feb 12 05:44:16 server nginx[12345]: 192.168.1.100 - - [12/Feb/2025:05:44:16 +0100] "GET /style.css HTTP/1.1" 200 1562

Lage egne systemd tjenester

Du kan lage egne systemd-tjenester ved å opprette en .service-fil i /etc/systemd/system/. Her er et eksempel på en tjeneste for en Python-webapplikasjon:
$ sudo nano /etc/systemd/system/webapp.service
[Unit]
Description=Python Web Application
After=network.target

[Service]
Type=simple
User=webapp
WorkingDirectory=/var/www/webapp
ExecStart=/usr/bin/python3 app.py
Restart=always
Environment=PORT=8000
Environment=DB_HOST=localhost

[Install]
WantedBy=multi-user.target

$ sudo systemctl daemon-reload
$ sudo systemctl start webapp
$ systemctl status webapp
● webapp.service - Python Web Application
     Loaded: loaded (/etc/systemd/system/webapp.service; disabled; vendor preset: enabled)
     Active: active (running) since Wed 2025-02-12 05:44:30 CET; 5s ago
   Main PID: 12360 (python3)
      Tasks: 1 (limit: 4915)
     Memory: 24.0M
        CPU: 123ms
     CGroup: /system.slice/webapp.service
             └─12360 /usr/bin/python3 app.py
Tips for systemd-tjenester:
  • Bruk systemctl status tjenestenavn for å se detaljert status og eventuelle feil
  • Sjekk logger med journalctl -u tjenestenavn for feilsøking
  • Husk å kjøre systemctl daemon-reload etter endringer i .service-filer
  • Bruk systemctl edit tjenestenavn for å legge til overstyrende konfigurasjon
  • Test alltid tjenesten med systemctl start før du aktiverer den med enable

Nyttige tips

  • Bruk systemctl list-units --type=service for å se alle aktive tjenester
  • Sjekk alltid status etter å ha startet eller stoppet en tjeneste
  • Bruk journalctl for å feilsøke problemer med tjenester
  • Husk å kjøre daemon-reload etter å ha endret tjenestekonfigurasjoner