Modul 6 · 6.1
Slovenčina
Správa služieb pomocou systemd
Modul 6: Služby a logy · Čas čítania: 10 minút
Cieľ lekcie: Po tejto lekcii budete vedieť služby spúšťať, zastavovať, znovu načítať a nastaviť ich spúšťanie pri štarte systému, čítať stav služby a bezpečne upraviť nastavenie služby pomocou drop-inu.
Kľúčové pojmy: systemd, unit, service, systemctl, start, stop, restart, reload, enable, disable, --now, active, inactive, failed, systemctl --failed, drop-in, systemctl edit, daemon-reload, Restart=
Kto udržiava všetko v chode?
Na serveri beží niekoľko desiatok programov, ktoré musia byť k dispozícii stále: SSH server, webový server, databáza, synchronizácia času. Takéto programy sa nazývajú služby (services alebo daemons). Niekto ich musí pri štarte spustiť, sledovať a znovu spustiť, keď spadnú. V Debiane, Ubuntu, AlmaLinux a Rocky Linux to robí systemd. Je to prvý program, ktorý jadro spustí (proces 1), a ten potom spustí všetko ostatné.
systemd pracuje s unitmi: popismi niečoho, čo má spravovať. Najdôležitejšie druhy:
| Druh | Prípona | Príklad |
|---|---|---|
| Služba | .service | nginx.service, ssh.service |
| Časovač (plánovaná úloha) | .timer | apt-daily.timer (lekcia 4.2, lekcia 6.3) |
| Socket | .socket | ssh.socket v Ubuntu 24.04 a novšom |
| Cieľ (skupina unitov) | .target | multi-user.target |
So systemd komunikujete cez príkaz systemctl. Príponu .service môžete vynechať: systemctl status nginx je to isté ako systemctl status nginx.service.
Čítanie stavu
Príkaz, ktorý budete používať najčastejšie:
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...Čítajte ho zhora nadol:
- Bodka pred názvom je zelená pri bežiacej službe, biela pri zastavenej a červená pri zlyhanej.
- Loaded uvádza, kde sa nachádza súbor unitu a či sa služba spúšťa pri štarte systému (
enabled), alebo nie (disabled). - Active uvádza, či služba práve beží (
active (running)), je zastavená (inactive (dead)) alebo zlyhala (failed), a odkedy. - Main PID a CGroup ukazujú, ktoré procesy patria k službe.
- Na konci sú posledné riadky z logu služby. Často tam už nájdete, prečo sa niečo pokazilo; viac si prečítate pomocou
journalctl(lekcia 6.2).
Spustenie, zastavenie, reštart a opätovné načítanie
anna@web1:~$ sudo systemctl start nginx # spustiť teraz
anna@web1:~$ sudo systemctl stop nginx # zastaviť teraz
anna@web1:~$ sudo systemctl restart nginx # zastaviť a znova spustiť
anna@web1:~$ sudo systemctl reload nginx # znova načítať konfiguráciu bez zastaveniaRozdiel medzi restart a reload je v praxi dôležitý. Pri reštarte sa služba na chvíľu zastaví: prebiehajúce spojenia sa prerušia, a ak nová konfigurácia obsahuje chybu, služba sa už nespustí a váš web nefunguje. Pri reload služba znovu načíta svoju konfiguráciu a pritom stále beží; pri chybe v konfigurácii si nginx ponechá tú starú. Pre nginx, Caddy, SSH a fail2ban preto po zmene konfigurácie používajte reload a konfiguráciu najprv otestujte (nginx -t, sshd -t, fail2ban-client -t). Nie každá služba podporuje reload; systemctl reload-or-restart si vyberie sám.
Pri štarte systému: enable a disable
Spustiť službu a nastaviť jej „spúšťanie pri štarte“ sú dve rozdielne veci:
anna@web1:~$ sudo systemctl enable nginx # odteraz sa spúšťa pri štarte systému
anna@web1:~$ sudo systemctl disable nginx # už sa nespúšťa pri štarte systému
anna@web1:~$ sudo systemctl enable --now nginx # oboje: spustiť teraz aj pri štarte systému
anna@web1:~$ systemctl is-enabled nginx
enabledKlasická chyba: službu spustíte pomocou start, všetko funguje, a po ďalšom reštarte (napríklad po aktualizácii jadra, lekcia 4.2) je preč. Pre novú službu preto používajte enable --now.
Ak chcete mať istotu, že sa služba nikdy nespustí, ani keď o ňu požiada iná služba, existuje mask: sudo systemctl mask <dienst>. Vrátiť to môžete pomocou unmask.
Čo je zle?
Jeden príkaz zobrazí všetky zlyhané unity:
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.Urobte si z toho zvyk, napríklad po každom reštarte a každom upgrade (lekcia 4.3): zoznam by mal byť prázdny. Po vyriešení problému hlásenie odstránite pomocou sudo systemctl reset-failed.
Prehľad všetkých bežiacich služieb:
anna@web1:~$ systemctl list-units --type=service --state=runningAk beží niečo, čo nepoznáte alebo nepoužívate, zistite, čo to je. Každá služba, ktorá nie je potrebná, je zbytočná plocha pre útok (lekcia 5.1 a 10.1).
Súbory unitov a drop-iny
Súbor unitu je textový súbor. Verzia z balíka sa nachádza v /usr/lib/systemd/system/ (na starších systémoch v /lib/systemd/system/). Tú nikdy neupravujte: aktualizácia balíka ju prepíše. Vlastné zmeny dajte do drop-inu: malého súboru, ktorý obsahuje iba riadky, ktoré chcete zmeniť. Najjednoduchšie to urobíte takto:
anna@web1:~$ sudo systemctl edit nginxOtvorí sa editor s prázdnou časťou medzi dvoma riadkami komentárov. To, čo tam napíšete, sa uloží do /etc/systemd/system/nginx.service.d/override.conf. Napríklad: automatický reštart nginx, keď sa nečakane zastaví.
[Service]
Restart=on-failure
RestartSec=5sPo uložení systemctl edit automaticky znovu načíta konfiguráciu systemd. Ak súbor unitu upravujete iným spôsobom, urobte to sami:
anna@web1:~$ sudo systemctl daemon-reload
anna@web1:~$ sudo systemctl restart nginxdaemon-reload prinúti systemd znovu načítať súbory unitov; samotnú službu potom ešte treba reštartovať, aby zmenu začala používať. Celkový výsledok (originál plus drop-iny) zobrazíte pomocou systemctl cat nginx.
Restart=on-failure je dobrý zvyk pre dôležité služby. Neskrývajte však tým skutočnú chybu: službu, ktorá každých päť sekúnd spadne a znovu sa spustí, treba preveriť v logu. Po niekoľkých rýchlych zlyhaniach za sebou systemd s reštartovaním prestane (predvolený limit je päť spustení v priebehu desiatich sekúnd) a nastaví službu na failed.
V AlmaLinux a Rocky Linux
systemd a systemctl fungujú úplne rovnako. Odlišujú sa niekedy len názvy služieb: SSH služba sa volá sshd, webový server z distribúcie sa volá httpd (Apache) alebo nginx a firewall firewalld.
V praxi
Obrazovka VPS u vášho poskytovateľa (vo WebOké aj inde) dokáže celý server vypnúť, reštartovať alebo „vynútene vypnúť“. To posledné je ako vytiahnuť zástrčku: služby nedostanú šancu korektne sa ukončiť a databáza sa môže poškodiť. Na serveri používajte sudo systemctl reboot alebo sudo shutdown -h now a v paneli bežné tlačidlo na vypnutie alebo reštart.
Zhrnutie
- systemd spúšťa a stráži všetky služby; ovládate ho pomocou
systemctl. systemctl statusukazuje, či služba beží, či sa spúšťa pri štarte systému, a posledné riadky logu.start/stop/restartplatia pre prítomnosť,enable/disablepre štart systému; pre novú službu použiteenable --now.- Po zmene konfigurácie: najprv otestovať, potom
reload;systemctl --failedby mal byť prázdny. - Nikdy neupravujte súbor unitu z balíka, namiesto toho použite drop-in cez
systemctl edit.
Kvíz
Úloha
Úloha O6.1: Prehľad vašich služieb. Na svojom serveri si vytvorte zoznam všetkých bežiacich služieb (systemctl list-units --type=service --state=running) a skontrolujte, či je systemctl --failed prázdny. Pri každej službe uveďte, čo robí a či ju potrebujete. Pri jednej službe, ktorú ste nepoznali, zistite, čo to je (systemctl status, man). Potom pre jednu dôležitú službu nastavte Restart=on-failure v drop-ine a pomocou systemctl cat overte, že tam je.
Úloha O6.1: Prehľad vašich služieb
Túto úlohu vykonávate sami, nikto ju nekontroluje. Odškrtnite, čo ste urobili, a označte úlohu ako splnenú.
Drop-in sa nachádza v /etc/systemd/system/<naam>.service.d/override.conf, nie v /usr/lib/systemd. Pri reload služba beží ďalej a napríklad nginx si pri chybe ponechá starú konfiguráciu; vopred otestujte pomocou nginx -t alebo sshd -t. Nepotrebné služby: disable --now alebo odstrániť balík.
Vaše zaškrtnutia a poznámky zostávajú iba v tomto prehliadači, nikam ich neposielame. Po prihlásení si v sekcii Moje kurzy uchovávame iba to, že ste úlohu splnili.
Ďalšie čítanie
- Manuál
systemctl(1): https://manpages.debian.org/trixie/systemd/systemctl.1.en.html - Manuál
systemd.service(5)(Restart=): https://manpages.debian.org/trixie/systemd/systemd.service.5.en.html - Manuál
systemd.unit(5)(drop-iny): https://manpages.debian.org/trixie/systemd/systemd.unit.5.en.html
