Prejsť na obsah

Nastavenia súborov cookie

Vyberte, aké druhy súborov cookie povolíte. Svoj výber môžete kedykoľvek zmeniť cez Nastavenia súborov cookie v dolnej časti každej stránky. Vyhlásenie o ochrane osobných údajov

Nevyhnutné

Vždy zapnuté

Potrebné na prihlásenie, uchovanie košíka a zapamätanie vašich volieb. Sú vždy zapnuté.

Ktoré súbory cookie?
  • weboke_sessie, weboke_klant, weboke_remember: vaša relácia a trvalé prihlásenie
  • weboke_basket: váš košík
  • wkBtwIncl: zobrazovanie cien s DPH alebo bez DPH
  • wok_cookies: váš výber súborov cookie, 12 mesiacov

Merajú, ktorá reklama vedie k návšteve alebo objednávke, aby sme neplatili za reklamy, ktoré nič neprinášajú.

Ktoré súbory cookie?
  • Google Ads cez Google Tag Manager (_gcl_au, _gcl_aw), najviac 90 dní
  • OpenAI Ads, reklamy v ChatGPT
  • wok_aff: ktorý partner vás k nám odporučil (partnerský program), 60 dní

4,6

Krajina a jazyk

Každá krajina má vlastný web s cenami a DPH danej krajiny.

Zobraziť

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:

DruhPríponaPríklad
Služba.servicenginx.service, ssh.service
Časovač (plánovaná úloha).timerapt-daily.timer (lekcia 4.2, lekcia 6.3)
Socket.socketssh.socket v Ubuntu 24.04 a novšom
Cieľ (skupina unitov).targetmulti-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 zastavenia

Rozdiel 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
enabled

Klasická 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=running

Ak 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 nginx

Otvorí 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=5s

Po 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 nginx

daemon-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 status ukazuje, či služba beží, či sa spúšťa pri štarte systému, a posledné riadky logu.
  • start/stop/restart platia pre prítomnosť, enable/disable pre štart systému; pre novú službu použite enable --now.
  • Po zmene konfigurácie: najprv otestovať, potom reload; systemctl --failed by mal byť prázdny.
  • Nikdy neupravujte súbor unitu z balíka, namiesto toho použite drop-in cez systemctl edit.

Kvíz

1. Spustili ste novú službu pomocou systemctl start. Po reštarte servera nebeží. Prečo?



2. Upravili ste konfiguráciu nginx. Aké je najbezpečnejšie poradie?



3. Kam patrí vaša vlastná úprava súboru unitu z balíka?



4. systemctl status zobrazuje Loaded: loaded (...; disabled; ...) a Active: active (running). Čo to znamená?



5. Služba má Restart=on-failure a každých pár sekúnd spadne. Aké je správne použitie tohto nastavenia?



Ú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ú.




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

Chvíľu strpenia…

Nastavte svoje domény

Pri každej doméne nastavte nameservery, prepojenie s hostingom a to, kto bude jej vlastníkom.

Načítavajú sa vaše domény…