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 medenable
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