Jednym z najpotężniejszych i najbardziej przydatnych narzędzi dla użytkowników Linuksa, zwłaszcza nowoczesnych dystrybucji, takich jak Ubuntu, jest polecenie systemctl. To narzędzie wiersza poleceń jest zwykle używane do interakcji z systemd, systemem i menedżerem usług.
Za pomocą polecenia możesz zarządzać usługami systemowymi, przeglądać ich stan, uruchamiać lub zatrzymywać je oraz włączać i wyłączać je podczas uruchamiania systemu. Całkiem przydatne, prawda? Jeśli jednak polecenie systemctl nie zostanie znalezione lub rozpoznane, napotkasz problem „sudo:systemctl: nie znaleziono polecenia” błąd.
Porozmawiajmy więc o tym, co oznacza błąd „systemctl: nie znaleziono polecenia”, o różnych przyczynach jego wystąpienia i o tym, jak go naprawić.
Co oznacza systemctl: Nie znaleziono polecenia?
Mówiąc najprościej, błąd „systemctl: nie znaleziono polecenia” oznacza, że narzędzie wiersza poleceń systemctl nie jest dostępne lub dostępne w bieżącym środowisku. Może to wynikać z wielu powodów, z których wszystkie sprowadzają się do tego, że środowisko jest środowiskiem niesystemowym lub pakiet systemd nie jest zainstalowany w systemie.
Zasadniczo pakiet systemd nie jest zainstalowany lub twoja dystrybucja Linuksa lub wersja nie używa systemd; używa raczej 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 powłoka nie może go znaleźć.
Teraz, gdy masz już pojęcie, co może być nie tak z Twoim systemem, co może prowadzić do błędu „systemctl: nie znaleziono polecenia”, przyjrzyjmy się, jak sprawdzić, gdzie leży problem i jak go naprawić.
Naprawianie systemctl: Błąd nie znaleziono polecenia
W kolejnych krokach sprawdzimy, czy Twój system ma zainstalowany systemd i używa systemctl, czy nie, a także sprawdzimy ścieżkę systemctl. Po zweryfikowaniu problemu podejmiemy niezbędne kroki, aby naprawić błąd.
1. Sprawdzanie, czy Twój system używa systemd
Ponieważ Ubuntu systemctl może być używany tylko wtedy, gdy masz zainstalowany pakiet systemd, najpierw sprawdzimy, czy Twój system powinien używać systemd, uruchamiając następujące polecenie:
ps -p 1 -o comm=
Możesz też sprawdzić wersję systemową za pomocą następującego polecenia:
systemd --version
Jeśli wyjściem jest systemd, to systemd jest twoim systemem init i powinien mieć zainstalowany Ubuntu systemctl. Jeśli jednak wynikiem jest init lub inny menedżer procesów, oznacza to, że Twój system korzysta z alternatywnego systemu inicjalizacji, a systemctl nie będzie działać, chyba że przeprowadzisz migrację do systemd.
Jeśli widzisz starsze systemy inicjalizacji, takie jak Upstart lub SysVinit i chcesz przełączyć się na systemd, aby używać systemctl, wykonaj następujące kroki:
1. Zainstaluj systemctl, instalując systemd za pomocą następującego polecenia:
sudo apt install systemd-sysv
2. Uruchom ponownie system, uruchamiając to polecenie:
sudo reboot
3. Sprawdź, czy Twój system używa teraz systemd:
ps -p 1 -o comm=
Dane wyjściowe powinny być teraz usystematyzowane.
2. Upewnij się, że systemd jest poprawnie zainstalowany
W normalnych okolicznościach, gdy systemd jest zainstalowany i działa jako system init, polecenie systemctl powinno działać poprawnie. Jeśli tak nie jest, oznacza to, że brakuje pakietu systemd lub jest on nieprawidłowo zainstalowany.
Pamiętaj, że jeśli używasz minimalnej wersji Ubuntu, takiej jak kontener Docker lub instancja w chmurze, systemd mógł nie zostać domyślnie zainstalowany. Aby zainstalować systemctl poprzez instalację systemd, uruchom następujące polecenia:
sudo apt update sudo apt install systemd
Po zainstalowaniu sprawdź, czy dostępna jest komenda systemctl.
3. Sprawdzanie ścieżki systemctl
Częstym problemem związanym z błędem „nie znaleziono systemuctl” jest to, że systemctl mógł zostać zainstalowany, ale nie znajduje się on w ścieżce systemowej PATH. Aby sprawdzić, czy pliki binarne systemowe istnieją w typowych katalogach, w których się znajdują, np. /bin, /usr/bin lub /usr/local/bin, możesz użyć następującego polecenia:
which systemctl
Jeśli systemctl zostanie znaleziony w którymkolwiek z katalogów wymienionych w PATH, powinieneś otrzymać taki wynik:
/usr/bin/systemctl
Jeśli systemctl nie zostanie znaleziony w żadnym z katalogów w PATH, polecenie who nic nie zwróci.
Jednak systemctl może nadal nie działać, mimo że znajduje się w twoich katalogach. Dzieje się tak, ponieważ systemctl może znajdować się w katalogu, który nie jest zawarty w PATH. W tej sytuacji będziesz musiał sprawdzić, czy katalog, w którym znajduje się systemctl, jest częścią twojego systemu, używając następującego polecenia:
echo $PATH
Dane wyjściowe powinny wyglądać mniej więcej tak:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Teraz wszystko, co musisz zrobić, to sprawdzić, czy katalog, w którym znajduje się systemctl (który otrzymałeś za pomocą polecenia Which) znajduje się w katalogach wymienionych w wynikach polecenia echo $PATH.
Jeśli katalog systemctl nie znajduje się w wynikach echo $PATH, będziesz musiał dodać go do zmiennej PATH. Aby to zrobić, musisz uruchomić następujące polecenie:
Dla Użytkownicy powłoki Bash, otwórz plik ~/.bashrc w edytorze tekstu:
nano ~/.bashrc
Dodaj następujący wiersz 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 następujący wiersz 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 ścieżki PATH. Teraz powinieneś móc uruchomić systemctl bez napotkania błędu „systemctl: nie znaleziono polecenia”.
4. Ponowna instalacja systemd
Jeśli poprzednie poprawki nie działają i nadal pojawia się komunikat o błędzie „nie znaleziono polecenia”, całkowita ponowna instalacja systemd może rozwiązać problem. Aby to zrobić, uruchom następujące polecenia:
sudo apt purge systemd sudo apt install systemd
Następnie zrestartuj system za pomocą tego polecenia:
sudo reboot
Sprawdź, czy systemctl działa.
5. Sprawdzanie, czy systemd jest poprawnie skonfigurowany
Czasami problem może być tak prosty, jak źle skonfigurowana instalacja systemd, powodująca błąd „systemctl: nie znaleziono polecenia”. Aby rozwiązać ten problem, wystarczy uruchomić następujące polecenie i gotowe:
sudo dpkg-reconfigure systemd
6. Nieaktualny podsystem Windows dla systemu Linux (WSL)
Jeśli nie używasz Ubuntu w ramach WSL (podsystem Windows dla systemu Linux) powinieneś wiedzieć, że starsze wersje WSL, takie jak WSL 1, nie obsługują natywnie systemuctl, więc niezależnie od tego, której z poprzednich poprawek użyjesz, nie będziesz mógł uruchomić systemctl.
Jeśli chcesz skorzystać z funkcji systemctl, będziesz musiał dokonać aktualizacji do wersji WSL 2, która lepiej obsługuje systemd. Jeśli nie masz pewności, czy używasz WSL, możesz to sprawdzić, używając następującego polecenia:
uname -a
Jeśli w wynikach pojawia się wzmianka o WSL, dlatego pojawia się błąd „systemctl: nie znaleziono polecenia”.
7. Korzystanie z usługi sudo jako alternatywy dla systemctl
Jeśli napotykasz błąd „systemctl: nie znaleziono polecenia”, 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 w systemach Ubuntu, które opierają się na skryptach init zamiast systemd.
Na przykład, aby uruchomić usługę, uruchom:
sudo service <service_name> start
Ostatnie przemyślenia
systemd i jego narzędzie wiersza poleceń systemctl zastąpiły większość innych starszych systemów init, takich jak SysVinit i Upstart. Choć systemd może nie być rozwiązaniem dla każdego, ze względu na jego monolityczną konstrukcję i filozofię nieuniksową, systemd jest nadal powszechnie uważany za najczęstszy wybór. Mamy więc nadzieję, że udało Ci się rozwiązać błąd dotyczący braku dostępności polecenia systemctl, ponieważ brak możliwości użycia narzędzia wiersza poleceń Systemd poważnie ogranicza jego możliwości.
Często zadawane pytania
Co to jest systemctl i co oznacza systemctl: Nie znaleziono polecenia?
systemctl to narzędzie wiersza poleceń służące do zarządzania usługami w systemach Linux z systemem systemd, takich jak Ubuntu. Błąd „systemctl: nie znaleziono polecenia” występuje, gdy narzędzie nie jest dostępne lub dostępne, zwykle dlatego, że system nie używa systemud 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). Starsze wersje lub niektóre minimalne instalacje mogą zamiast tego używać alternatywnych systemów init, takich jak SysVinit lub Upstart.