Een van de krachtigste en handigste tools voor Linux-gebruikers, vooral moderne distributies zoals Ubuntu, is de systemctl-opdracht. Dit opdrachtregelhulpprogramma wordt doorgaans gebruikt voor interactie met systemd, het systeem en de servicemanager.
Via de opdracht kunt u systeemservices beheren, hun status bekijken, ze starten of stoppen, en ze in- en uitschakelen bij het opstarten van het systeem. Best handig, toch? Maar als de opdracht systemctl niet wordt gevonden of herkend, wordt u geconfronteerd met de “sudo:systemctl: opdracht niet gevonden” fout.
Laten we het dus hebben over wat de fout ‘systemctl: command not found’ betekent, de verschillende redenen waarom u met deze fout wordt geconfronteerd en hoe u deze fout kunt oplossen.
Wat betekent systemctl: opdracht niet gevonden?
Simpel gezegd betekent de fout “systemctl: command not found” dat het opdrachtregelhulpprogramma systemctl niet beschikbaar of toegankelijk is in de huidige omgeving. Dit kan te wijten zijn aan een groot aantal redenen, die allemaal te maken hebben met het feit dat de omgeving een niet-systeemomgeving is, of dat het systemd-pakket niet op het systeem is geïnstalleerd.
Kortom, het systemd-pakket is niet geïnstalleerd, of je Linux-distro of -versie gebruikt geen systemd; het maakt eerder gebruik van oudere servicemanagementsystemen zoals init.d. Een andere mogelijkheid is dat de omgevingsvariabele PATH niet de map bevat waarin systemctl zich bevindt, wat betekent dat uw shell deze niet kan vinden.
Nu u een idee heeft van wat er mis zou kunnen zijn met uw systeem, wat leidt tot de foutmelding “systemctl: command not found”, gaan we kijken hoe u kunt verifiëren waar uw probleem ligt en hoe u dit kunt oplossen.
De systemctl repareren: opdracht niet gevonden fout
In de volgende stappen gaan we verifiëren of uw systeem systemd heeft geïnstalleerd en systemctl gebruikt of niet, en controleren we het pad van systemctl. Zodra we het probleem hebben geverifieerd, gaan we de nodige stappen ondernemen om de fout op te lossen.
1. Controleren of uw systeem systemd gebruikt
Omdat Ubuntu systemctl alleen kan worden gebruikt als je het systemd-pakket hebt geïnstalleerd, gaan we eerst controleren of je systeem systemd moet gebruiken door de volgende opdracht uit te voeren:
ps -p 1 -o comm=
Of u kunt de systemd-versie controleren met de volgende opdracht:
systemd --version
Als de uitvoer systemd is, dan is systemd uw init-systeem en zou Ubuntu systemctl geïnstalleerd moeten zijn. Als de uitvoer echter init of een andere procesmanager is, betekent dit dat uw systeem een alternatief initialisatiesysteem gebruikt en dat systemctl niet zal werken tenzij u naar systemd migreert.
Als u oudere initialisatiesystemen zoals Upstart of SysVinit ziet en wilt overschakelen naar systemd om systemctl te gebruiken, volgt u deze stappen:
1. Installeer systemctl door systemd te installeren met behulp van de volgende opdracht:
sudo apt install systemd-sysv
2. Start uw systeem opnieuw op door deze opdracht uit te voeren:
sudo reboot
3. Controleer of uw systeem nu systemd gebruikt:
ps -p 1 -o comm=
De uitvoer zou nu moeten worden gesystematiseerd.
2. Ervoor zorgen dat systemd correct is geïnstalleerd
Onder normale omstandigheden, wanneer systemd is geïnstalleerd en draait als uw init-systeem, zou de opdracht systemctl correct moeten werken. Als dit niet het geval is, betekent dit dat het systemd-pakket ontbreekt of niet goed is geïnstalleerd.
Houd er rekening mee dat als u een minimale versie van Ubuntu gebruikt, zoals een Docker-container of een cloudinstantie, systemd mogelijk niet standaard is geïnstalleerd. Om systemctl te installeren via het installeren van systemd, voert u de volgende opdrachten uit:
sudo apt update sudo apt install systemd
Controleer na de installatie of de opdracht systemctl beschikbaar is.
3. Het PATH van systemctl controleren
Een veelvoorkomend probleem met de fout systemctl not found is dat systemctl wel kan worden geïnstalleerd, maar dat dit niet in het PATH van uw systeem staat. Om te controleren of systemd binaire bestanden al dan niet voorkomen in typische mappen waarin deze zich bevinden, zoals /bin, /usr/bin of /usr/local/bin, kunt u de volgende opdracht gebruiken:
which systemctl
Als systemctl wordt gevonden in een van uw mappen vermeld in PATH, zou u een uitvoer als deze moeten krijgen:
/usr/bin/systemctl
Als systemctl niet wordt gevonden in een van de mappen in PATH, zal het commando who niets retourneren.
Systemctl werkt echter mogelijk nog steeds niet, ook al staat het in uw mappen. Dit komt omdat systemctl zich in een map kan bevinden die niet in het PATH is opgenomen. In deze situatie moet u verifiëren of de map waarin systemctl zich bevindt deel uitmaakt van uw systeem door de volgende opdracht te gebruiken:
echo $PATH
De uitvoer zou ongeveer zo moeten zijn:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Het enige dat u nu hoeft te doen is controleren of de map waarin systemctl zich bevindt (die u via het commando who hebt gekregen) is opgenomen in de mappen die worden vermeld in de uitvoer van het echo $PATH-commando.
Als de map van systemctl niet is opgenomen in de uitvoer van echo $PATH, moet je deze toevoegen aan je PATH-variabele. Om dit te doen, moet je de volgende opdracht uitvoeren:
Voor Bash shell-gebruikers, open het bestand ~/.bashrc in een teksteditor:
nano ~/.bashrc
Voeg de volgende regel toe aan het einde van het bestand:
export PATH=$PATH:/usr/bin
/usr/bin is een typische map waarin systemctl zich in dit voorbeeld bevindt.
Sla het bestand nu op en sluit het door op CTRL + X te drukken, vervolgens op Y om te bevestigen en op Enter om op te slaan.
Voor Zsh-gebruikers, Open het ~/.zshrc-bestand in een teksteditor:
nano ~/.zshrc
Voeg de volgende regel toe aan het einde van het bestand:
export PATH=$PATH:/usr/bin
/usr/bin is een typische map waarin systemctl zich in dit voorbeeld bevindt.
Sla het bestand nu op en sluit het door op CTRL + X te drukken, vervolgens op Y om te bevestigen en op Enter om op te slaan.
Zodra u klaar bent met de bovenstaande stappen, gebruikt u de opdracht echo $PATH om te verifiëren of de directory van uw systemctl aan uw PATH is toegevoegd. Nu zou u systemctl moeten kunnen uitvoeren zonder de foutmelding “systemctl: opdracht niet gevonden” tegen te komen.
4. Systemd opnieuw installeren
Als de vorige oplossingen niet werken en u nog steeds te maken krijgt met de fout 'opdracht niet gevonden', kan het probleem mogelijk worden opgelost door systemd volledig opnieuw te installeren. Om dit te doen, voert u de volgende opdrachten uit:
sudo apt purge systemd sudo apt install systemd
Start vervolgens uw systeem opnieuw op met deze opdracht:
sudo reboot
Controleer of de systemctl werkt.
5. Controleren of systemd correct is geconfigureerd
Soms kan het probleem zo simpel zijn als een verkeerd geconfigureerde installatie van systemd, resulterend in een “systemctl: command not found”-fout. Het enige dat u hoeft te doen om dit probleem op te lossen, is door de volgende opdracht uit te voeren en u bent klaar:
sudo dpkg-reconfigure systemd
6. Verouderd Windows-subsysteem voor Linux (WSL)
Als je toevallig Ubuntu gebruikt onder WSL (Windows-subsysteem voor Linux) u moet weten dat de oudere versies van WSL, zoals WSL 1, systemctl niet native ondersteunen, dus ongeacht welke van de vorige fixes u gebruikt, u zult systemctl niet kunnen uitvoeren.
Als je wilt profiteren van de functies van systemctl, moet je upgraden naar WSL 2, dat betere ondersteuning biedt voor systemd. Als u niet zeker weet of u WSL gebruikt, kunt u dit controleren met behulp van de volgende opdracht:
uname -a
Als de uitvoer WSL vermeldt, dan zie je daarom de foutmelding “systemctl: command not found”.
7. Sudo Service gebruiken als alternatief voor systemctl
Als u te maken krijgt met de foutmelding 'systemctl: command not found' omdat uw systeem systemd niet gebruikt, kunt u de opdracht sudo service gebruiken om services te beheren. Deze opdracht werkt met oudere init-systemen zoals SysVinit of Upstart. Dit is handig voor Ubuntu-systemen die afhankelijk zijn van init-scripts in plaats van systemd.
Om bijvoorbeeld een service te starten, voert u het volgende uit:
sudo service <service_name> start
Laatste gedachten
systemd en zijn opdrachtregelhulpprogramma systemctl hebben de meeste andere oudere init-systemen zoals SysVinit en Upstart vervangen. Hoewel systemd misschien niet ieders kopje init system-thee is vanwege het monolithische ontwerp en de niet-Unix-filosofie, wordt systemd nog steeds algemeen beschouwd als de meest voorkomende keuze. Hopelijk heb je dus de fout systemctl command not Available kunnen oplossen, omdat het niet kunnen gebruiken van het opdrachtregelhulpprogramma van systemd de mogelijkheden ervan ernstig beperkt.
Veelgestelde vragen
Wat is systemctl en wat betekent systemctl: opdracht niet gevonden?
systemctl is een opdrachtregelprogramma dat wordt gebruikt om services te beheren op Linux-systemen waarop systemd wordt uitgevoerd, zoals Ubuntu. De fout “systemctl: command not found” treedt op wanneer de tool niet beschikbaar of toegankelijk is, meestal omdat het systeem systemd niet gebruikt of het systemd-pakket niet is geïnstalleerd.
Is systemctl beschikbaar op alle versies van Ubuntu?
Nee, systemctl is niet beschikbaar op alle versies van Ubuntu. systemctl maakt deel uit van het systemd init-systeem, dat de standaard is in de meeste moderne Ubuntu-versies (vanaf 15.04). Oudere versies of bepaalde minimale installaties kunnen in plaats daarvan alternatieve init-systemen gebruiken, zoals SysVinit of Upstart.