Jeden z nejsilnějších a nejvíce praktických nástrojů pro uživatele Linux, zvlášť u moderních distribucí jako Ubuntu, je systemctl příkaz. Tento nástroj příkazové řádky slouží obvykle ke komunikaci se systemd, správcem systému a služeb.
Příkazem můžete spravovat systémové služby, zobrazit jejich stav, je spouštět či zastavovat a povolovat či zakazovat jejich spuštění při startu systému. Docela užitečné, ne? Pokud ale příkaz systemctl nenajde váš systém nebo ho nerozpozná, narazíte na sudo:systemctl: příkaz nenalezen chyba.
Pojďme si vysvětlit, co znamená chyba "systemctl: command not found", proč se s ní setkáváte a jak ji opravit.
Co znamená chyba systemctl: Command Not Found?
Zjednodušeně řečeno, chyba "systemctl: command not found" znamená, že nástroj příkazové řádky systemctl není v aktuálním prostředí dostupný nebo přístupný. Může to být způsobeno různými důvody, které se vždy vrací k tomu, že prostředí není systémové prostředí, nebo že balíček systemd není v systému nainstalován.
Problém je buď v tom, že balíček systemd není nainstalován, nebo vaše distribuce Linux či její verze systemd nepoužívá. Místo toho se spoléhá na starší systémy správy služeb jako init.d. Další možností je, že proměnná prostředí PATH neobsahuje adresář, kde se nachází systemctl, takže vaše shell jej nemůže najít.
Teď, když máte představu, co by mohlo být špatně s vaším systémem a vést k chybě "systemctl: command not found", se podívejme, jak ověříte, kde přesně je problém, a jak jej vyřešit.
Řešení chyby systemctl: Command Not Found
V následujících krocích ověříme, zda má váš systém nainstalován systemd a používá systemctl, a také zkontrolujeme cestu k systemctl. Jakmile problém ověříme, provedeme potřebné kroky k jeho vyřešení.
1. Ověření, zda váš systém používá systemd
Protože Ubuntu systemctl lze používat pouze v případě, že máte nainstalovaný balíček systemd, nejdříve si ověříme, zda má váš systém používat systemd, spuštěním následujícího příkazu:
ps -p 1 -o comm=
Nebo si můžete ověřit verzi systemd pomocí následujícího příkazu:
systemd --version
Pokud je výstup systemd, pak systemd je váš init systém a měl by mít nainstalován Ubuntu systemctl. Pokud je však výstup init nebo jiný správce procesů, znamená to, že váš systém používá alternativní inicializační systém a systemctl nebude fungovat, dokud se nemigrujete na systemd.
Pokud vidíte starší systémy pro inicializaci jako Upstart nebo SysVinit a chcete přejít na systemd, abyste mohli používat systemctl, postupujte takto:
1. Nainstalujte systemctl instalací systemd pomocí následujícího příkazu:
sudo apt install systemd-sysv
2. Restartujte systém spuštěním tohoto příkazu:
sudo reboot
3. Ověřte, že váš systém nyní používá systemd:
ps -p 1 -o comm=
Výstup by teď měl být systemd.
2. Zajištění správné instalace systemd
Za normálních okolností by měl příkaz systemctl fungovat správně, pokud je systemd nainstalován a běží jako váš init systém. Pokud nefunguje, znamená to, že balíček systemd chybí nebo není správně nainstalován.
Pamatujte, že pokud používáte minimální verzi Ubuntu, například kontejner Docker nebo cloudovou instanci, nemusí být systemd nainstalován ve výchozím nastavení. Chcete-li nainstalovat systemctl prostřednictvím instalace systemd, spusťte následující příkazy:
sudo apt update sudo apt install systemd
Po instalaci ověřte, zda je příkaz systemctl dostupný.
3. Kontrola systemctl cesty
Běžným problémem chyby systemctl not found je, že systemctl může být nainstalován, ale není v PATH vašeho systému. Chcete-li ověřit, zda existují binární soubory systemd v typických adresářích, jako jsou /bin, /usr/bin nebo /usr/local/bin, použijte následující příkaz:
which systemctl
Pokud se systemctl nachází v některém z adresářů uvedených v PATH, měli byste dostat výstup takto:
/usr/bin/systemctl
Pokud se systemctl nenachází v žádném adresáři v PATH, příkaz which vrátí nic.
Přesto se může stát, že systemctl nebude fungovat, přestože ho systém najde. Důvodem je, že systemctl může být umístěn v adresáři, který není zahrnut v PATH. V tomto případě musíte ověřit, zda je adresář se systemctl součástí cesty vašeho systému. Použijte k tomu následující příkaz:
echo $PATH
Výstup by měl vypadat zhruba takto:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Teď stačí jen ověřit, jestli adresář, kde se systemctl nachází (který jsi získal příkazem which), je zahrnutý v adresářích uvedených ve výstupu příkazu echo $PATH.
Pokud se adresář systemctl nenachází ve výstupu příkazu echo $PATH, musíte ho přidat do vaší PATH proměnné. Spusťte pro to následující příkaz:
Pro Uživatelé Bash shellu, otevřete soubor ~/.bashrc v textovém editoru:
nano ~/.bashrc
Na konec souboru přidejte následující řádek:
export PATH=$PATH:/usr/bin
/usr/bin je typický adresář, kde se v tomto příkladu nachází systemctl.
Soubor nyní uložte a zavřete stisknutím CTRL + X, pak Y pro potvrzení a Enter pro uložení.
Pro Uživatelé Zsh, otevřete soubor ~/.zshrc v textovém editoru:
nano ~/.zshrc
Na konec souboru přidejte následující řádek:
export PATH=$PATH:/usr/bin
/usr/bin je typický adresář, kde se v tomto příkladu nachází systemctl.
Soubor nyní uložte a zavřete stisknutím CTRL + X, pak Y pro potvrzení a Enter pro uložení.
Jakmile dokončíte výše uvedené kroky, ověřte příkazem echo $PATH, zda byl adresář systemctl přidán do vaší PATH. Nyní byste měli být schopni spustit systemctl bez chyby "systemctl: command not found".
4. Přeinstalace systemd
Pokud předchozí řešení nefungují a stále se vám zobrazuje chyba, může vám pomoci úplná přeinstalace systemd. Spusťte následující příkazy:
sudo apt purge systemd sudo apt install systemd
Poté restartujte systém tímto příkazem:
sudo reboot
Ověřte, zda systemctl funguje.
5. Ověření správné konfigurace systemd
Někdy může být problém způsoben pouhým špatným nastavením systemd, které vede k chybě "systemctl: command not found". Chcete-li problém vyřešit, stačí spustit následující příkaz:
sudo dpkg-reconfigure systemd
6. Zastaralý Windows Subsystem for Linux (WSL)
V případě, že používáte Ubuntu pod WSL (Windows Subsystem for Linux) měli byste vědět, že starší verze WSL, například WSL 1, nativně systemctl nepodporují. Ať už použijete kterékoli z předchozích řešení, systemctl spustit nebudete moci.
Pokud chcete využívat funkce systemctl, musíte upgradovat na WSL 2, která má lepší podporu pro systemd. Pokud si nejste jisti, zda WSL používáte, můžete to ověřit následujícím příkazem:
uname -a
Pokud výstup obsahuje WSL, pak je to důvod, proč se vám zobrazuje chyba "systemctl: command not found".
7. Použití sudo service jako alternativy k systemctl
Pokud se vám zobrazuje chyba "systemctl: command not found" proto, že váš systém nepoužívá systemd, můžete ke správě služeb použít příkaz sudo service. Tento příkaz funguje se staršími init systémy jako SysVinit nebo Upstart. To je užitečné pro systémy Ubuntu, které se spoléhají na init skripty místo systemd.
Chcete-li například spustit službu, spusťte:
sudo service <service_name> start
Závěrečné myšlenky
systemd a jeho příkazový nástroj systemctl nahradily většinu starších init systémů, jako jsou SysVinit a Upstart. Ačkoli systemd není pro každého ideální volbou kvůli své monolitické architektuře a filosofii, která se odklání od tradičních unixových principů, systemd je stále obecně považován za převládající volbu. Doufáme, že se vám podařilo vyřešit chybu systemctl, neboť nedostupnost tohoto nástroje významně omezuje možnosti systemd.
Často kladené otázky
Co je systemctl a co znamená chyba systemctl: Command Not Found?
systemctl je příkazový nástroj používaný ke správě služeb v systémech Linux běžících systemd, například Ubuntu. Chyba "systemctl: command not found" se zobrazí, když nástroj není dostupný nebo přístupný, obvykle proto, že systém nepoužívá systemd nebo není nainstalován balíček systemd.
Je systemctl dostupný ve všech verzích Ubuntu?
Ne, systemctl není dostupný ve všech verzích Ubuntu. systemctl je součástí init systému systemd, který je výchozí v většině moderních verzí Ubuntu (od verze 15.04 dále). Starší verze nebo určité minimální instalace mohou místo toho používat alternativní init systémy jako SysVinit nebo Upstart.