Jedním z nejvýkonnějších a nejužitečnějších nástrojů pro uživatele Linuxu, zejména moderní distribuce, jako je Ubuntu, je příkaz systemctl. Tento nástroj příkazového řádku se obvykle používá k interakci se systemd, systémem a správcem služeb.
Prostřednictvím příkazu můžete spravovat systémové služby, zobrazovat jejich stav, spouštět nebo zastavovat je a povolit a zakázat při startu systému. Docela šikovné, že? Ale pokud příkaz systemctl není nalezen nebo rozpoznán, budete čelit "sudo:systemctl: příkaz nenalezen" chyba.
Pojďme si tedy promluvit o tom, co znamená chyba „systemctl: příkaz nenalezen“, různé důvody, proč se s touto chybou setkáváte, a jak tuto chybu opravit.
Co znamená systemctl: Příkaz nenalezen?
Jednoduše řečeno, chyba „systemctl: příkaz nenalezen“ znamená, že nástroj příkazového řádku systemctl není v aktuálním prostředí dostupný nebo přístupný. To může být způsobeno řadou důvodů, které se všechny vrací buď k prostředí, které je nesystémovým prostředím, nebo k tomu, že balíček systemd není v systému nainstalován.
V zásadě není balíček systemd nainstalován nebo vaše distribuce nebo verze Linuxu nepoužívá systemd; spíše používá starší systémy správy služeb, jako je init.d. Další možností je, že proměnná prostředí PATH nezahrnuje adresář, kde se nachází systemctl, což znamená, že jej váš shell nemůže najít.
Nyní, když máte představu o tom, co by mohlo být s vaším systémem špatně, což vede k chybě „systemctl: příkaz nenalezen“, pojďme se podívat na to, jak můžete ověřit, kde se váš problém nachází a jak jej opravit.
Oprava systemctl: Chyba příkazu nenalezena
V následujících krocích ověříme, zda má váš systém nainstalovaný systemd a používá systemctl nebo ne, a také zkontrolujeme cestu systemctl. Jakmile problém ověříme, podnikneme nezbytné kroky k nápravě chyby.
1. Ověření, zda váš systém používá systemd
Protože Ubuntu systemctl lze použít pouze v případě, že máte nainstalovaný balíček systemd, nejprve zkontrolujeme, zda váš systém má používat systemd spuštěním následujícího příkazu:
ps -p 1 -o comm=
Nebo můžete zkontrolovat 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 nainstalovaný Ubuntu systemctl. Pokud je však výstupem init nebo jiný správce procesů, znamená to, že váš systém používá alternativní inicializační systém a systemctl nebude fungovat, dokud nemigrujete na systemd.
Pokud vidíte starší inicializační systémy 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. Zkontrolujte, zda váš systém nyní používá systemd:
ps -p 1 -o comm=
Výstup by měl být nyní systemizován.
2. Zajištění správné instalace systemd
Za normálních okolností, když je systemd nainstalován a běží jako váš init systém, by měl příkaz systemctl fungovat správně. Pokud tomu tak není, znamená to, že balíček systemd buď chybí, nebo je nesprávně nainstalován.
Všimněte si, že pokud používáte minimální verzi Ubuntu, jako je kontejner Docker nebo cloudová instance, nemusí být systemd ve výchozím nastavení nainstalován. 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 zkontrolujte, zda je k dispozici příkaz systemctl.
3. Kontrola cesty systemctl
Jedním z běžných problémů s chybou systemctl not found je, že systemctl lze nainstalovat, ale není v PATH vašeho systému. Chcete-li zkontrolovat, zda binární soubory systemd existují v typických adresářích, kde se nacházejí, například /bin, /usr/bin nebo /usr/local/bin, můžete použít následující příkaz:
which systemctl
Pokud je systemctl nalezen v některém z vašich adresářů uvedených v PATH, měli byste získat výstup takto:
/usr/bin/systemctl
Pokud systemctl není nalezen v žádném z adresářů v PATH, příkaz which nevrátí nic.
Systemctl však stále nemusí fungovat, i když je ve vašich adresářích nalezen. Je to proto, že systemctl může být umístěn v adresáři, který není zahrnut v PATH. V této situaci budete muset pomocí následujícího příkazu ověřit, zda je adresář, kde se nachází systemctl, součástí vašeho systému:
echo $PATH
Výstup by měl být něco takového:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Nyní vše, co musíte udělat, je zkontrolovat, zda adresář, ve kterém se nachází systemctl (který jste získali z příkazu which), je zahrnut v adresářích uvedených ve výstupu příkazu echo $PATH.
Pokud adresář systemctl není zahrnut ve výstupu echo $PATH, budete ho muset přidat do své proměnné PATH. Chcete-li to provést, musíte spustit následující příkaz:
Pro Uživatelé shellu Bash, 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.
Nyní uložte a zavřete soubor stisknutím CTRL + X, poté 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.
Nyní uložte a zavřete soubor stisknutím CTRL + X, poté Y pro potvrzení a Enter pro uložení.
Jakmile provedete výše uvedené kroky, použijte příkaz echo $PATH k ověření, zda byl adresář vašeho systemctl přidán do vaší PATH. Nyní byste měli být schopni spustit systemctl bez spuštění chyby „systemctl: příkaz nenalezen“.
4. Přeinstalace systemd
Pokud předchozí opravy nefungují a stále čelíte chybě příkazu nenalezen, může problém vyřešit úplná přeinstalace systemd. Chcete-li to provést, spusťte následující příkazy:
sudo apt purge systemd sudo apt install systemd
Poté restartujte systém pomocí tohoto příkazu:
sudo reboot
Zkontrolujte, zda systemctl funguje.
5. Ověření, zda je systemd správně nakonfigurován
Někdy může být problém tak jednoduchý, jako špatně nakonfigurovaná instalace systemd, což vede k chybě „systemctl: příkaz nenalezen“. Vše, co musíte udělat, abyste tento problém vyřešili, je spustit následující příkaz a máte hotovo:
sudo dpkg-reconfigure systemd
6. Zastaralý subsystém Windows pro Linux (WSL)
Při příležitosti, kdy používáte Ubuntu WSL (podsystém Windows pro Linux) měli byste vědět, že starší verze WSL, jako je WSL 1, nativně nepodporují systemctl, takže bez ohledu na to, kterou z předchozích oprav použijete, nebudete moci spustit systemctl.
Pokud chcete využít funkce systemctl, budete muset upgradovat na WSL 2, který má lepší podporu pro systemd. Pokud si nejste jisti, zda používáte WSL či nikoli, můžete to zkontrolovat pomocí následujícího příkazu:
uname -a
Pokud výstup zmiňuje WSL, pak se vám zobrazuje chyba „systemctl: příkaz nenalezen“.
7. Použití služby sudo jako alternativy k systemctl
Pokud se potýkáte s chybou „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 je SysVinit nebo Upstart. To je užitečné pro systémy Ubuntu, které spoléhají na init skripty namísto systemd.
Chcete-li například spustit službu, spustili byste:
sudo service <service_name> start
Závěrečné myšlenky
systemd a jeho nástroj příkazového řádku systemctl nahradil většinu ostatních starších init systémů jako SysVinit a Upstart. Zatímco systemd nemusí být pro každého šálkem čaje init system kvůli svému monolitickému designu a non-Unix filozofii, systemd je stále obecně považován za převládající volbu. Doufejme, že se vám podařilo vyřešit chybu příkazu systemctl nedostupný, protože nemožnost používat nástroj příkazového řádku systemd vážně omezuje jeho možnosti.
FAQ
Co je systemctl a co znamená systemctl: Příkaz nenalezen?
systemctl je nástroj příkazového řádku používaný ke správě služeb v systémech Linux se systémem systemd, jako je Ubuntu. Chyba „systemctl: command not found“ se objeví, 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 k dispozici na všech verzích Ubuntu?
Ne, systemctl není k dispozici ve všech verzích Ubuntu. systemctl je součástí systému systemd init, který je výchozí ve většině moderních verzí Ubuntu (od 15.04 výše). Starší verze nebo určité minimální instalace mohou místo toho používat alternativní init systémy jako SysVinit nebo Upstart.