Jedno z najpotężniejszych i najbardziej przydatnych narzędzi dla użytkowników Linux, szczególnie nowoczesnych dystrybucji takich jak Ubuntu, to polecenie systemctl. To narzędzie wiersza poleceń jest zwykle używane do interakcji z systemd, menadżerem systemu i usług.
Poprzez polecenie możesz zarządzać usługami systemowymi, wyświetlać ich status, uruchamiać lub zatrzymywać je oraz włączać i wyłączać je przy starcie systemu. Całkiem przydatne, prawda? Ale jeśli polecenie systemctl nie zostanie znalezione lub rozpoznane, napotkasz błąd "sudo: systemctl: polecenie nie znalezione" błąd.
Porozmawiajmy o tym, co oznacza błąd "systemctl: polecenie nie znalezione", jakie są różne przyczyny tego błędu i jak go naprawić.
Co oznacza błąd systemctl: polecenie nie znalezione?
Mówiąc prościej, błąd "systemctl: polecenie nie znalezione" oznacza, że narzędzie wiersza poleceń systemctl nie jest dostępne w bieżącym środowisku. Może to być spowodowane wieloma przyczynami, które sprowadzają się do tego, że środowisko jest środowiskiem nie-systemowym lub pakiet systemd nie jest zainstalowany na systemie.
Zasadniczo pakiet systemd nie jest zainstalowany, lub twoja dystrybucja lub wersja Linux nie używa systemd; zamiast tego używa starszych systemów zarządzania usługami, takich jak init.d. Inną możliwością jest to, że zmienna środowiskowa PATH nie zawiera katalogu, w którym znajduje się systemctl, co oznacza, że twoja powłoka nie może go znaleźć.
Teraz, gdy masz pojęcie o tym, co może być nie tak z Twoim systemem, prowadzące do błędu "systemctl: command not found", przyjrzyjmy się, jak możesz sprawdzić, gdzie leży Twój problem i jak go naprawić.
Rozwiązanie błędu systemctl: Polecenie nie znalezione
W kolejnych krokach sprawdzisz, czy w twoim systemie zainstalowany jest systemd i czy używa on systemctl. Sprawdzisz też ścieżkę do systemctl. Kiedy potwierdzisz problem, podejmiemy kroki niezbędne do naprawienia błędu.
1. Sprawdzenie, czy Twój system używa systemd
Ponieważ Ubuntu systemctl można używać tylko jeśli masz zainstalowany pakiet systemd, najpierw sprawdzamy, czy twój system ma używać systemd, uruchamiając poniższą komendę:
ps -p 1 -o comm=
Alternatywnie możesz sprawdzić wersję systemd, wykonując następujące polecenie:
systemd --version
Jeśli wynik to systemd, to systemd jest twoim systemem init i powinien mieć zainstalowany systemctl Ubuntu. Natomiast jeśli wynik to init lub inny menadżer procesów, oznacza to, że twój system używa alternatywnego systemu inicjalizacji, a systemctl nie będzie działać, dopóki nie przemigrujesz na systemd.
Jeśli widzisz starsze systemy inicjalizacji takie jak Upstart czy SysVinit i chcesz przejść na systemd, aby używać systemctl, wykonaj te kroki:
1. Zainstaluj systemctl instalując systemd za pomocą poniższego polecenia:
sudo apt install systemd-sysv
2. Uruchom ponownie swój system, wpisując tę komendę:
sudo reboot
3. Sprawdź, czy Twój system korzysta teraz z systemd:
ps -p 1 -o comm=
Dane wyjściowe powinny być teraz w formacie systemd.
2. Upewnienie się, że systemd jest prawidłowo zainstalowany
Normalnie, jeśli systemd jest zainstalowany i działa jako twój system init, polecenie systemctl powinno działać poprawnie. Jeśli tak się nie dzieje, oznacza to, że pakiet systemd albo nie został zainstalowany, albo został zainstalowany nieprawidłowo.
Pamiętaj, że jeśli używasz minimalnej wersji Ubuntu, na przykład kontenera Docker lub instancji chmurowej, systemd może nie być zainstalowany domyślnie. Aby zainstalować systemctl przez instalację systemd, uruchom następujące polecenia:
sudo apt update sudo apt install systemd
Po instalacji sprawdź, czy polecenie systemctl jest dostępne.
3. Sprawdzanie PATH systemctl
Częstym problemem błędu "systemctl not found" jest sytuacja, gdy systemctl jest zainstalowany, ale nie znajduje się w PATH systemu. Aby sprawdzić, czy binarne pliki systemd istnieją w typowych katalogach takich jak /bin, /usr/bin lub /usr/local/bin, wykonaj poniższą komendę:
which systemctl
Jeśli systemctl zostanie znaleziony w którymkolwiek z katalogów wymienionych w zmiennej PATH, powinieneś zobaczyć wynik podobny do tego:
/usr/bin/systemctl
Jeśli systemctl nie zostanie znaleziony w żadnym z katalogów w PATH, polecenie which nie zwróci nic.
Jednak systemctl może nie działać, nawet jeśli znajduje się w twoich katalogach. Dzieje się tak, ponieważ systemctl może znajdować się w katalogu, który nie jest uwzględniony w zmiennej PATH. W tej sytuacji musisz sprawdzić, czy katalog zawierający systemctl jest częścią twojej ścieżki systemowej, używając poniższego polecenia:
echo $PATH
Wynik powinien wyglądać mniej więcej tak:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Teraz wystarczy sprawdzić, czy katalog zawierający systemctl (ten, który znalazłeś poleceniem which) jest zawarty w katalogach wymienionych w wyniku polecenia echo $PATH.
Jeśli katalog systemctl nie pojawia się w wynikach echo $PATH, musisz dodać go do zmiennej PATH. Uruchom poniższe polecenie:
Dla Użytkownicy powłoki Bash, otwórz plik ~/.bashrc w edytorze tekstu:
nano ~/.bashrc
Dodaj poniższą linię na końcu pliku:
export PATH=$PATH:/usr/bin
/usr/bin to typowy katalog, w którym w tym przykładzie znajduje się systemctl.
Teraz zapisz i zamknij plik, naciskając CTRL + X, następnie Y aby potwierdzić, i Enter aby zapisać.
Dla Użytkownicy Zsh, otwórz plik ~/.zshrc w edytorze tekstu:
nano ~/.zshrc
Dodaj poniższą linię na końcu pliku:
export PATH=$PATH:/usr/bin
/usr/bin to typowy katalog, w którym w tym przykładzie znajduje się systemctl.
Teraz zapisz i zamknij plik, naciskając CTRL + X, następnie Y aby potwierdzić, i Enter aby zapisać.
Po wykonaniu powyższych kroków użyj polecenia echo $PATH, aby sprawdzić, czy katalog systemctl został dodany do twojej zmiennej PATH. Powinno być możliwe uruchomienie systemctl bez błędu "systemctl: command not found".
4. Ponowna instalacja systemd
Jeśli poprzednie rozwiązania nie działają i nadal pojawia się błąd command not found, pełna reinstalacja systemd może rozwiązać problem. Aby to zrobić, uruchom następujące polecenia:
sudo apt purge systemd sudo apt install systemd
Następnie uruchom ponownie system tym poleceniem:
sudo reboot
Sprawdź, czy systemctl działa prawidłowo.
5. Sprawdzenie, czy systemd jest prawidłowo skonfigurowany
Czasami problem może być spowodowany źle skonfigurowaną instalacją systemd, co skutkuje błędem "systemctl: command not found". Aby naprawić ten problem, wystarczy uruchomić poniższe polecenie:
sudo dpkg-reconfigure systemd
6. Nieaktualny Podsystem Windows dla Linux (WSL)
Na wypadek gdybyś używał Ubuntu w środowisku WSL (podsystem Windows dla systemu Linux) warto wiedzieć, że starsze wersje WSL, takie jak WSL 1, nie obsługują natywnie systemctl. Niezależnie od tego, które z poprzednich rozwiązań zastosujemy, nie będziesz mógł uruchomić systemctl.
Aby móc korzystać z funkcji systemctl, będziesz musiał uaktualnić do WSL 2, które ma lepsze wsparcie dla systemd. Jeśli nie jesteś pewny, czy używasz WSL, możesz to sprawdzić za pomocą poniższego polecenia:
uname -a
Jeśli wynik zawiera WSL, to właśnie dlatego widzisz błąd "systemctl: command not found".
7. Użycie sudo service jako alternatywy dla systemctl
Jeśli pojawia się błąd "systemctl: command not found" ponieważ twój system nie używa systemd, możesz użyć polecenia sudo service do zarządzania usługami. To polecenie działa ze starszymi systemami init, takimi jak SysVinit lub Upstart. Jest to przydatne dla systemów Ubuntu, które opierają się na skryptach init zamiast systemd.
Na przykład, aby uruchomić usługę, uruchomiłbyś:
sudo service <service_name> start
Ostateczne Przemyślenia
systemd i jego narzędzie wiersza poleceń systemctl zastąpiły większość starszych systemów init, takich jak SysVinit czy Upstart. Chociaż systemd nie wszystkim się podoba ze względu na swoją monolityczną strukturę i filozofię odbiegającą od standardów Unix, wciąż uważany jest za dominujący wybór. Mamy nadzieję, że udało ci się rozwiązać problem z niedostępnym poleceniem systemctl, ponieważ brak dostępu do tego narzędzia znacznie ogranicza możliwości systemd.
Często zadawane pytania
Czym jest systemctl i co oznacza błąd "systemctl: Command Not Found"?
systemctl to narzędzie wiersza poleceń służące do zarządzania usługami w systemach Linux z systemd, takich jak Ubuntu. Błąd "systemctl: command not found" pojawia się, gdy narzędzie nie jest dostępne, zwykle dlatego że system nie używa systemd lub pakiet systemd nie jest zainstalowany.
Czy systemctl jest dostępny we wszystkich wersjach Ubuntu?
Nie, systemctl nie jest dostępny we wszystkich wersjach Ubuntu. systemctl jest częścią systemu init systemd, który jest domyślny w większości nowoczesnych wersji Ubuntu (od 15.04 wzwyż). Starsze wersje lub niektóre instalacje minimalne mogą używać alternatywnych systemów init, takich jak SysVinit lub Upstart.