Přejít na obsah

Nastavení cookies

Zvolte, které druhy cookies povolíte. Svou volbu můžete kdykoli změnit přes Nastavení cookies v dolní části každé stránky. Prohlášení o ochraně osobních údajů

Nezbytné

Vždy zapnuté

Potřebné pro přihlášení, uchování košíku a zapamatování vašich voleb. Jsou vždy zapnuté.

Které cookies?
  • weboke_sessie, weboke_klant, weboke_remember: vaše relace a trvalé přihlášení
  • weboke_basket: váš košík
  • wkBtwIncl: zobrazení cen s DPH nebo bez DPH
  • wok_cookies: vaše volba cookies, 12 měsíců

Měří, která reklama vede k návštěvě nebo objednávce, abychom neplatili za reklamy, které nic nepřinášejí.

Které cookies?
  • Google Ads přes Google Tag Manager (_gcl_au, _gcl_aw), až 90 dní
  • OpenAI Ads, reklamy v ChatGPT
  • wok_aff: partner, který vás k nám doporučil (partnerský program), 60 dní

4,6

Země a jazyk

Každá země má vlastní web s cenami a DPH dané země.

Zobrazit

Správa služeb pomocí systemd

Modul 6: Služby a logy · Doba čtení: 10 min.

Cíl lekce: Po této lekci budete umět spouštět, zastavovat a znovu načítat služby a nastavit jejich spuštění při startu systému, číst stav služby a bezpečně změnit nastavení služby pomocí drop-inu.

Klíč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=

Kdo udržuje vše v chodu?

Na serveru běží desítky programů, které musí být k dispozici neustále: SSH server, webový server, databáze, synchronizace času. Takovým programům se říká služby (services, neboli daemony). Někdo je musí při startu systému spustit, hlídat je a znovu spustit, když spadnou. Na Debianu, Ubuntu, AlmaLinuxu a Rocky Linuxu to dělá systemd. Je to první program, který jádro spustí (proces 1), a ten pak spouští vše ostatní.

systemd pracuje s units (jednotkami): popisy něčeho, co má spravovat. Nejdůležitější druhy:

DruhPříponaPříklad
Služba.servicenginx.service, ssh.service
Časovač (plánovaná úloha).timerapt-daily.timer (lekce 4.2, lekce 6.3)
Socket.socketssh.socket na Ubuntu 24.04 a novějším
Cíl (skupina units).targetmulti-user.target

Se systemd komunikujete pomocí příkazu systemctl. Příponu .service můžete vynechat: systemctl status nginx je totéž co systemctl status nginx.service.

Čtení stavu

Příkaz, který budete používat nejčastěji:

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

Čtěte jej shora dolů:

  • Kolečko před názvem je zelené u běžící služby, bílé u zastavené a červené u služby, která selhala.
  • Loaded říká, kde je soubor unit uložen a zda se služba spouští při startu systému (enabled), nebo ne (disabled).
  • Active říká, zda služba právě běží (active (running)), je zastavená (inactive (dead)), nebo selhala (failed), a od kdy.
  • Main PID a CGroup ukazují, které procesy ke službě patří.
  • Dole jsou poslední řádky z logu služby. Často se tam už dočtete, proč se něco pokazilo; více uvidíte pomocí journalctl (lekce 6.2).

Spuštění, zastavení, restart a opětovné načtení

anna@web1:~$ sudo systemctl start nginx      # spustit nyní
anna@web1:~$ sudo systemctl stop nginx       # zastavit nyní
anna@web1:~$ sudo systemctl restart nginx    # zastavit a znovu spustit
anna@web1:~$ sudo systemctl reload nginx     # znovu načíst konfiguraci bez zastavení

Rozdíl mezi restart a reload je v praxi důležitý. Při restartu se služba na chvíli zastaví: probíhající spojení se přeruší, a pokud nová konfigurace obsahuje chybu, služba se už nespustí a Váš web nefunguje. Při reloadu služba znovu načte svou konfiguraci a přitom dál běží; při chybě v konfiguraci si nginx ponechá tu starou. Pro nginx, Caddy, SSH a fail2ban proto po změně konfigurace používejte reload a konfiguraci nejprve otestujte (nginx -t, sshd -t, fail2ban-client -t). Ne každá služba reload podporuje; systemctl reload-or-restart si vybere sám.

Při startu systému: enable a disable

Spustit službu a nastavit, aby se „spouštěla při startu systému“, jsou dvě různé věci:

anna@web1:~$ sudo systemctl enable nginx         # nově se spouští při startu systému
anna@web1:~$ sudo systemctl disable nginx        # už se nespouští při startu systému
anna@web1:~$ sudo systemctl enable --now nginx   # obojí: spustit nyní i při startu systému
anna@web1:~$ systemctl is-enabled nginx
enabled

Klasická chyba: službu spustíte pomocí start, vše funguje, a po dalším restartu (například kvůli aktualizaci jádra, lekce 4.2) je pryč. Pro novou službu proto používejte enable --now.

Chcete-li mít jistotu, že se služba nikdy nespustí, ani když si o ni řekne jiná služba, existuje mask: sudo systemctl mask <dienst>. Vrátit zpět to můžete pomocí unmask.

Co je špatně?

Jeden příkaz ukáže všechny units, které selhaly:

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.

Udělejte si z toho zvyk, například po každém restartu a každém upgradu (lekce 4.3): seznam by měl být prázdný. Po vyřešení problému hlášení odstraníte pomocí sudo systemctl reset-failed.

Přehled všech běžících služeb:

anna@web1:~$ systemctl list-units --type=service --state=running

Pokud běží něco, co neznáte nebo nepoužíváte, zjistěte, co to je. Každá služba, která není potřeba, je zbytečná plocha pro útok (lekce 5.1 a 10.1).

Soubory unit a drop-iny

Soubor unit je textový soubor. Verze z balíčku je uložena v /usr/lib/systemd/system/ (na starších systémech /lib/systemd/system/). Tu nikdy neupravujte: aktualizace balíčku ji přepíše. Vlastní změny patří do drop-inu: malého souboru, který obsahuje jen ty řádky, které chcete změnit. Nejsnáze to uděláte takto:

anna@web1:~$ sudo systemctl edit nginx

Otevře se editor s prázdným místem mezi dvěma řádky komentáře. Co tam napíšete, se uloží do /etc/systemd/system/nginx.service.d/override.conf. Například: automaticky znovu spustit nginx, když se nečekaně zastaví.

[Service]
Restart=on-failure
RestartSec=5s

Po uložení systemctl edit sám znovu načte konfiguraci systemd. Pokud soubor unit upravujete jiným způsobem, spusťte sami:

anna@web1:~$ sudo systemctl daemon-reload
anna@web1:~$ sudo systemctl restart nginx

daemon-reload přiměje systemd znovu načíst soubory unit; samotnou službu pak ještě musíte restartovat, aby změnu začala používat. Celkový výsledek (originál plus drop-iny) uvidíte pomocí systemctl cat nginx.

Restart=on-failure je dobrý zvyk pro důležité služby. Neskrývejte tím ale skutečnou chybu: služba, která každých pět sekund spadne a znovu se spustí, si zaslouží prozkoumat v logu. systemd po několika rychlých selháních za sebou přestane službu restartovat (výchozí limit je pět spuštění během deseti sekund) a nastaví ji do stavu failed.

Na AlmaLinuxu a Rocky Linuxu

systemd a systemctl fungují úplně stejně. Liší se jen někdy názvy služeb: služba SSH se jmenuje sshd, webový server z distribuce se jmenuje httpd (Apache) nebo nginx a firewall firewalld.

V praxi

Obrazovka VPS u Vašeho poskytovatele (u WebOké i jinde) umí celý server vypnout, restartovat nebo „vynuceně vypnout“. To poslední je jako vytrhnout zástrčku: služby nedostanou šanci se řádně ukončit a databáze se pak může poškodit. Uvnitř serveru používejte sudo systemctl reboot nebo sudo shutdown -h now a v panelu běžné tlačítko pro vypnutí nebo restart.

Shrnutí

  • systemd spouští a hlídá všechny služby; ovládáte jej pomocí systemctl.
  • systemctl status ukazuje, zda služba běží, zda se spouští při startu systému, a poslední řádky logu.
  • start/stop/restart platí pro tuto chvíli, enable/disable pro start systému; pro novou službu používejte enable --now.
  • Po změně konfigurace: nejprve otestovat, pak reload; systemctl --failed by mělo být prázdné.
  • Nikdy neupravujte soubor unit z balíčku, použijte drop-in pomocí systemctl edit.

Kvíz

1. Spustili jste novou službu pomocí systemctl start. Po restartu serveru neběží. Proč?



2. Upravili jste konfiguraci nginx. Jaký je nejbezpečnější postup?



3. Kam patří Vaše vlastní úprava souboru unit z balíčku?



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



5. Služba má Restart=on-failure a každých pár sekund spadne. Jak toto nastavení správně používat?



Úkol

Úkol O6.1: Přehled Vašich služeb. Vytvořte na svém serveru seznam všech běžících služeb (systemctl list-units --type=service --state=running) a zkontrolujte, zda je systemctl --failed prázdné. U každé služby uveďte, co dělá a zda ji potřebujete. U jedné služby, kterou jste neznali, zjistěte, co to je (systemctl status, man). Poté u jedné důležité služby nastavte Restart=on-failure v drop-inu a pomocí systemctl cat ověřte, že tam je.

Úkol O6.1: Přehled Vašich služeb

Tento úkol provádíte sami; nikdo ho nekontroluje. Odškrtněte, co jste udělali, a označte úkol jako splněný.




Vaše zaškrtnutí a poznámky zůstávají pouze v tomto prohlížeči; nikam je neposíláme. Pokud jste přihlášeni, ukládáme v sekci Moje kurzy pouze to, že jste úkol splnili.

Doporučujeme k přečtení

Chvíli strpení…

Nastavení vašich domén

U každé domény nastavte jmenné servery, propojení s hostingem a to, kdo bude držitelem.

Načítání vašich domén…