Jak používat systemctl k výpisu a správě služeb v Linuxu: Kompletní průvodce pro začátečníky

目次

1. Úvod

Při používání Linuxu existuje mnoho situací, kdy můžete chtít zkontrolovat stav služeb nebo vypsat všechny běžící procesy. V takových případech je příkaz systemctl extrémně užitečný.

Tento příkaz interaguje s „systemd“, systémem inicializace a správcem služeb na Linuxu, a poskytuje širokou škálu funkcí, jako je kontrola stavu služeb (jednotek), spouštění, zastavování, restartování a vypsání služeb.

Zvláště pokud jde o „vypsání pomocí systemctl“, můžete pochopit strukturu svého systému z různých úhlů – nejen aktuálně aktivní služby, ale i neaktivní nebo služby nastavené na automatické spuštění.

Tato sekce krátce načrtne základy toho, co je „systemctl“, a vysvětlí, co se naučíte v tomto článku.

Co je systemctl?

systemctl je standardní nástroj pro ovládání a kontrolu různých „jednotek“, jako jsou služby, cíle a body připojení na distribucích Linuxu založených na systemd.

Například ho používáte k spuštění nebo zastavení služeb jako Apache (httpd) nebo SSH, nebo k vypsání stavu těchto služeb.

Vztah mezi systemd a systemctl

systemd je jádrový systém pro bootovací procesy a správu služeb na Linuxu, který nahrazuje starší nástroje jako SysVinit a Upstart. systemctl je nástroj příkazového řádku, který interaguje přímo se systemd.

Jinými slovy, pokud je systemd „řídícím“, pak systemctl působí jako „operátor“, který posílá instrukce.

Co se naučíte v tomto článku

Tento článek odpovídá na následující běžné otázky:

  • Jak mohu vypsat všechny aktuálně běžící služby?
  • Jak zahrnout neaktivní služby do seznamu?
  • Jak zkontrolovat, které služby jsou povoleny k automatickému spuštění?
  • Jak číst a interpretovat výsledky?

Každý příklad příkazu a jeho výstup je pečlivě vysvětlen pro začátečníky, takže se nebojte sledovat až do konce.

2. Jak vypsat služby pomocí systemctl

V administraci Linuxového systému je rychlé pochopení seznamu služeb nezbytné. S příkazem systemctl můžete snadno zobrazit nejen aktuálně aktivní služby, ale i neaktivní a ty nastavené na automatické spuštění.

Zde vysvětlíme tři hlavní perspektivy pro vypsání služeb:

  • Seznam aktivních služeb
  • Seznam všech služeb (včetně neaktivních)
  • Seznam souborů jednotek služeb (včetně nastavení spuštění)

2.1 Vypsání aktuálně aktivních služeb

K zkontrolování toho, které služby „běží“ na vašem systému, použijte tento základní příkaz:

systemctl list-units --type=service

Tento příkaz zobrazí seznam aktuálně aktivních (běžících) služeb. Výstup obsahuje následující sloupce:

ColumnDescription
UNITName of the service (e.g., ssh.service)
LOADWhether the unit file is loaded
ACTIVEService status (e.g., active, inactive, failed)
SUBDetailed status (e.g., running, exited, dead)
DESCRIPTIONBrief description of the service

Tyto informace vám pomohou pochopit, například, zda nginx aktuálně běží nebo jaké služby jsou aktivní.

2.2 Vypsání všech služeb, včetně neaktivních

Ve výchozím nastavení list-units zobrazuje pouze aktuálně aktivní služby. K zahrnutí neaktivních služeb přidejte volbu --all:

systemctl list-units --type=service --all

Tato volba vám umožní vidět služby ve stavu „inactive“ nebo ty, které nikdy nebyly spuštěny.

Pokud chcete výsledky dále zúžit, použijte volbu --state= k filtrování podle specifického stavu:

systemctl list-units --type=service --state=inactive

To je užitečné, když chcete zkontrolovat pouze zastavené služby, například.

2.3 Vypsání souborů jednotek služeb

Pokud chcete vědět nejen aktuální stav, ale i které služby jsou povoleny a nastaveny na automatické spuštění, použijte následující příkaz:

systemctl list-unit-files --type=service

To zobrazí seznam souborů jednotek služeb (konfiguračních souborů) a umožní vám zkontrolovat jejich stav povolení/zakázání (enabled, disabled, atd.).

STATE ValueDescription
enabledAutomatically enabled at boot
disabledNot enabled at boot; must be started manually
staticStarted as a dependency of other units; cannot be enabled/disabled directly
maskedExplicitly disabled and cannot be started (protected)

Prohlížení tohoto seznamu vám pomůže vizuálně pochopit, které služby se spouštějí při bootu a zda některé nebyly omylem maskovány.

3. Základní správa služeb pomocí systemctl

Příkaz systemctl nejen kontroluje stav služby, ale také umožňuje službu spustit, zastavit, restartovat a povolit nebo zakázat. Zde jsou základní operace často používané při správě Linuxových systémů.

Ovládání těchto příkazů je nezbytné pro každodenní správu serverů a řešení problémů.

3.1 Spuštění služby

Pro ruční spuštění konkrétní služby použijte podpříkaz start:

sudo systemctl start [service name]

Například pro spuštění Apache (httpd):

sudo systemctl start httpd.service

Služba se spustí okamžitě. Pokud chcete, aby po restartu systému pokračovala, použijte také enable (viz níže).

3.2 Zastavení služby

Pro zastavení služby použijte tento příkaz:

sudo systemctl stop [service name]

Příklad:

sudo systemctl stop sshd.service

Služba zůstane zastavena, dokud ji výslovně znovu nespustíte.

3.3 Restartování služby

Pro restartování služby (například po změně konfigurace) použijte:

sudo systemctl restart [service name]

Příklad:

sudo systemctl restart nginx.service

Restart vždy nejprve zastaví a poté spustí službu, bez ohledu na její aktuální stav.

3.4 Kontrola stavu služby

Pro podrobnou kontrolu stavu služby použijte podpříkaz status:

systemctl status [service name]

Příklad:

systemctl status mysql.service

Zobrazí aktuální aktivní stav, ID procesu (PID), souhrn logu a další informace – velmi užitečné při řešení problémů.

3.5 Povolení služby pro automatické spuštění

Aby se služba spouštěla automaticky při bootování, použijte podpříkaz enable:

sudo systemctl enable [service name]

Příklad:

sudo systemctl enable docker.service

Nyní se služba spustí automaticky při dalším startu systému.

3.6 Zakázání automatického spouštění služby

Pro zakázání automatického startu použijte příkaz disable:

sudo systemctl disable [service name]

Příklad:

sudo systemctl disable cups.service

Tím zabráníte spuštění služby při bootování.

3.7 Kontrola, zda je služba povolena

Pro zjištění, zda je služba povolena (spouští se automaticky), použijte is-enabled:

systemctl is-enabled [service name]

Ukázkový výstup:

enabled

Rychle vám řekne, jaká je politika spouštění služby.

4. Užitečné volby a pokročilé techniky pro systemctl

Příkaz systemctl podporuje nejen základní operace start/stop, ale také pokročilé úkoly správy. Zde jsou některé praktické volby a techniky, které byste měli znát.

Využití těchto funkcí může výrazně zvýšit efektivitu správy služeb v Linuxu.

4.1 Výpis závislostí služby

V Linuxu některé služby závisí na dalších jednotkách (services, mounts, targets atd.). Pro kontrolu závislostí použijte list-dependencies:

systemctl list-dependencies [service name]

Příklad:

systemctl list-dependencies nginx.service

Tento příkaz zobrazí související jednotky ve stromové struktuře – užitečné pro analýzu pořadí spouštění a nepřímých závislostí.

4.2 Prohlížení obsahu souboru jednotky

Pokud chcete zkontrolovat podrobnosti konfigurace jednotky, můžete zobrazit samotný soubor jednotky:

systemctl cat [service name]

Příklad:

systemctl cat ssh.service

Zobrazí cestu k souboru a jeho obsah, což vám umožní rychle nahlédnout do vlastních nastavení.

4.3 Načtení změn souborů jednotek

Pokud ručně upravíte soubor jednotky, použijte daemon-reload k aplikaci změn:

sudo systemctl daemon-reexec

Nebo častěji:

sudo systemctl daemon-reload

Tím se v systemd načtou soubory jednotek znovu, takže změny nabudou účinku. Pokud se nastavení nezdají být aplikována, zkuste nejprve tento příkaz.

4.4 Kontrola logů služby (doplněk)

I když nejde o příkaz systemctl, journalctl je užitečný pro kontrolu logů služby:

journalctl -u [service name]

Příklad:

journalctl -u docker.service

Umožní vám prohlédnout chyby při startu a historii restartů – nezbytný krok při řešení problémů.

5. Časté problémy a řešení

Když spravujete služby pomocí systemctl, věci ne vždy proběhnou podle očekávání. Tato část vysvětluje běžné problémy a jak je vyřešit.

Buďte připraveni na situace jako „služba se nespustí“ nebo „nemůžu najít příčinu“ tím, že znáte tyto základní kroky odstraňování potíží.

5.1 Odstraňování potíží, když se služba nespustí

Můžete vidět chyby jako:

Job for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xe" for details.

Pro určení příčiny zkontrolujte následující kroky v uvedeném pořadí:

  1. Zkontrolovat stav
    systemctl status [service name]
    
  1. Zkontrolovat chybové záznamy
    journalctl -xe
    
  1. Znovu načíst soubory jednotek Pokud jste právě upravili soubor jednotky, načtěte jej znovu pomocí:
    sudo systemctl daemon-reload
    
  1. Zkontrolovat konflikty portů Podívejte se, jestli jiný proces již nepoužívá daný port:
    sudo netstat -tulnp | grep [port number]
    

5.2 Jak číst chybové zprávy v příkazu status

Když spustíte systemctl status, uvidíte stav služby i nejnovější zprávy z logu. Například:

● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
   Active: failed (Result: exit-code) since Fri 2025-04-18 12:00:00 JST; 5s ago
  Process: 12345 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=1/FAILURE)

To vám umožní rychle odhalit selhání (např. „Active: failed“, „status=1/FAILURE“) a který proces vrátil chybu.

Řádek Loaded ukazuje cestu k souboru jednotky, což usnadňuje identifikaci konfiguračního souboru, který je třeba upravit.

5.3 Když služby neočekávaně skončí

Pokud se služba spustí, ale okamžitě se zastaví, běžné příčiny zahrnují:

  • Chyby v konfiguračních souborech
  • Konflikty portů
  • Chybějící požadované soubory nebo adresáře
  • Nedostatečná oprávnění k provedení

Pro vyřešení vyzkoušejte následující:

  • Zkontrolovat a ověřit konfigurační soubory (např. nginx -t nebo apachectl configtest)
  • Sledovat podrobné logy pomocí journalctl -u [service name]
  • Zajistit, aby požadované adresáře (např. /var/run/xxx) existovaly; pokud ne, vytvořte je

5.4 Není možné spustit služby ve stavu masked

Pokud vidíte tuto chybu:

Failed to start example.service: Unit example.service is masked.

Služba je ve stavu masked (zcela zakázána a blokována před spuštěním). Odmaskujte ji pomocí:

sudo systemctl unmask [service name]

Pak můžete službu spustit jako obvykle.

6. Shrnutí

Správa služeb v Linuxu je nezbytnou součástí každodenního provozu systému. Příkaz systemctl hraje centrální roli, umožňuje kontrolovat seznamy služeb a efektivně je spravovat.

Tento článek vysvětlil následující body pomocí klíčového slova „systemctl list“:

Co můžete dělat s příkazem systemctl (rekapitulace)

  • Zkontrolovat seznam služeb
  • Zobrazit aktuálně aktivní služby (list-units --type=service)
  • Vypsat všechny služby včetně neaktivních (--all nebo --state= možnosti)
  • Zobrazit soubory jednotek služby a jejich stav při startu (list-unit-files)
  • Základní operace se službami
  • Spustit, zastavit, restartovat a zkontrolovat stav (start / stop / restart / status)
  • Povolit/zakázat automatické spouštění (enable / disable / is-enabled)
  • Pokročilé operace a odstraňování potíží
  • Kontrolovat závislosti, prohlížet soubory jednotek, znovu načíst konfigurace
  • Zkoumat chyby pomocí logů a kontrol stavů

Nejlepší postupy pro správu služeb

  • Vždy zkontrolujte stav před provedením změn (příkaz status)
  • Znáte stav automatického spouštění (is-enabled)
  • Po provedení změn vždy spusťte daemon-reload
  • Pro problémy kontrolujte logy pomocí journalctl

Pečlivé kontroly jako tyto zajišťují stabilní poskytování služeb a rychlejší odstraňování potíží v administraci Linuxových systémů.

Další vzdělávání

Pokud se chcete dozvědět více, zvažte prozkoumání témat jako:

  • systemd cíle (a rozdíly oproti runlevelům)
  • Plánované úlohy pomocí systemd-timer
  • Jak vytvořit a spravovat vlastní unit soubory

7. Často kladené otázky (FAQ)

Tato sekce shrnuje často kladené otázky a odpovědi týkající se příkazu systemctl a výpisu služeb. I když jste s základy spokojeni, projděte si je pro rychlou referenci.

Q1. Jaký je rozdíl mezi příkazy systemctl a service?

A1.
systemctl je příkaz pro správu služeb založený na systemd a je standardem pro většinu moderních distribucí Linuxu (Ubuntu, CentOS, Fedora atd.).
Naopak service pochází ze staršího systému SysVinit. I když je někdy zachován pro kompatibilitu, v prostředí systemd se doporučuje používat systemctl.

Q2. Jaký je rozdíl mezi list-units a list-unit-files?

A2.

  • list-units zobrazuje aktuálně načtené jednotky (aktivní nebo dříve použité).
  • list-unit-files vypisuje všechny unit soubory a jejich stav povolení/zakázání. Přemýšlejte o tom jako o rozdílu mezi „co běží právě teď“ a „co je nastaveno, aby běželo“.

Q3. Můžu spustit službu ve „statickém“ stavu?

A3.
Ano, můžete ručně start službu ve static stavu, ale nemůžete ji enable, aby se spouštěla automaticky. Důvodem je, že statické služby jsou určeny k spuštění jako závislosti jiných jednotek.

Q4. Nemohu spustit maskovanou službu. Co mám dělat?

A4.
masked znamená „úplně zakázáno“. Odmaskujte pomocí:

sudo systemctl unmask [service name]

Po té ji můžete spustit normálně.

Q5. Existuje GUI pro výpis stavu služby?

A5.
V závislosti na vaší distribuci vám nástroje jako gnome-system-monitor, KSysGuard nebo Cockpit mohou umožnit zkontrolovat stav služby přes grafické rozhraní. Pro pokročilé operace však systemctl zůstává nejspolehlivější metodou.

Q6. Kam umístit vlastní unit soubory?

A6.
Obvykle je umístěte do /etc/systemd/system/. Po úpravě nezapomeňte spustit:

sudo systemctl daemon-reload

Pak je spravujte jako obvykle pomocí start nebo enable.

侍エンジニア塾