🟢 Beginner

Systemd — Správa služieb a systému

Systemd je init systém a správca služieb v modernom Linuxe. Ovláda štart systému, spravuje služby, logy, timery a závislosti medzi komponentmi. Ak pracuješ s Linuxom, pracuješ so systemd.


Ako funguje systemd?

Systemd pracuje s unit files — konfiguračnými súbormi, ktoré popisujú služby, mounty, timery a ďalšie systémové komponenty. Units sa nachádzajú v:

  • /etc/systemd/system/ — vlastné a override units (najvyššia priorita)
  • /lib/systemd/system/ — units z balíčkov
  • /run/systemd/system/ — runtime units

Správa služieb (systemctl)

# Základné operácie
systemctl start nginx        # spustiť službu
systemctl stop nginx         # zastaviť
systemctl restart nginx      # reštartovať
systemctl reload nginx       # reload konfigurácie bez reštartu
systemctl status nginx       # stav a posledné logy

# Automatický štart
systemctl enable nginx       # zapnúť pri boote
systemctl disable nginx      # vypnúť pri boote
systemctl enable --now nginx # zapnúť a zároveň spustiť

# Zoznam služieb
systemctl list-units --type=service
systemctl list-units --failed

Vlastný unit file

Vytvorenie služby pre vlastnú aplikáciu — /etc/systemd/system/myapp.service:

[Unit]
Description=My Application
After=network.target postgresql.service
Wants=postgresql.service

[Service]
Type=simple
User=deploy
Group=deploy
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/bin/server --port 8080
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5
Environment=NODE_ENV=production
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
# Po vytvorení/zmene unit file
systemctl daemon-reload
systemctl enable --now myapp

Journalctl — Centrálne logy

Systemd journal zbiera logy zo všetkých služieb:

# Logy konkrétnej služby
journalctl -u nginx

# Sledovanie v reálnom čase
journalctl -u myapp -f

# Posledných 100 riadkov
journalctl -u myapp -n 100

# Logy od určitého času
journalctl -u myapp --since "2026-02-27 10:00" --until "2026-02-27 12:00"

# Logy podľa priority
journalctl -p err     # len chyby a horšie

# Veľkosť journal
journalctl --disk-usage
journalctl --vacuum-size=500M

Timers — Náhrada za cron

Systemd timers sú modernejšia alternatíva k cronu:

# /etc/systemd/system/backup.timer
[Unit]
Description=Daily backup timer

[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true

[Install]
WantedBy=timers.target
# Zoznam timerov
systemctl list-timers --all

# Aktivácia
systemctl enable --now backup.timer

Dependencies a poradie štartu

  • After= — spusti sa až po danej službe
  • Requires= — závislosť, bez nej zlyhá
  • Wants= — slabá závislosť, pokračuje aj keď zlyhá
  • Before= — spusti sa pred danou službou

Best Practices

  • Vždy Restart=on-failure — služby by mali prežiť pád
  • Používaj systemctl edit — vytvára override bez úpravy pôvodného unit file
  • Loguj cez stdout/stderr — systemd journal to zachytí automaticky
  • Nastavuj limityLimitNOFILE, MemoryMax, CPUQuota
  • Timers > cron — lepší logging, dependencies, persistent catch-up
  • daemon-reload po každej zmene — inak systemd nevidí nové unit files

Systemd je mocný nástroj. Pochop unit files, nauč sa journalctl a tvoja správa služieb bude profesionálna.