Et af de mest kraftfulde og praktiske værktøjer for Linux-brugere, især moderne distributioner som Ubuntu, er systemctl kommando. Dette kommandolinie-værktøj bruges typisk til at arbejde med systemd, systemet og servicehåndteringen.
Med kommandoen kan du administrere systemtjenester, se deres status, starte eller stoppe dem og aktivere eller deaktivere dem ved systemstart. Ret praktisk, ikke? Men hvis systemctl-kommandoen ikke findes eller genkendes, skal du forberedes på at møde «sudo: systemctl: command not found» fejl.
Lad os tage udgangspunkt i, hvad fejlen "systemctl: command not found" betyder, hvilke årsager der kan ligge bag fejlen, og hvordan du får den løst.
Hvad betyder fejlen 'systemctl: Command Not Found'?
I korthed betyder fejlen "systemctl: command not found" at systemctl-kommandolinjeværktøjet ikke er tilgængeligt i dit aktuelle miljø. Det skyldes typisk enten at miljøet ikke er et fuldt system, eller at systemd-pakken ikke er installeret.
Det skyldes typisk, at systemd-pakken ikke er installeret, eller at din Linux-distribution eller -version ikke bruger systemd, men i stedet benytter ældre servicestyrringssystemer som init.d. En anden mulighed er, at PATH-miljøvariablen ikke indeholder det bibliotek, hvor systemctl er placeret, så dit shell ikke kan finde det.
Nu hvor du har en idé om, hvad der kunne være galt med dit system og forårsager fejlen "systemctl: command not found", lad os se på, hvordan du kan lokalisere problemet og fixe det.
Løsning på systemctl: Command Not Found-fejlen
I de følgende trin skal vi kontrollere, om dit system har systemd installeret og bruger systemctl, samt tjekke systemctls sti. Når vi har bekræftet problemet, tager vi de nødvendige skridt til at løse fejlen.
1. Tjekker om dit system bruger systemd
Da Ubuntu systemctl kun kan bruges, hvis du har systemd-pakken installeret, skal vi først kontrollere, om dit system skal bruge systemd, ved at køre følgende kommando:
ps -p 1 -o comm=
Eller du kan kontrollere systemd-versionen med følgende kommando:
systemd --version
Hvis outputtet er systemd, så er systemd dit init-system og burde have systemctl installeret. Hvis outputtet derimod er init eller en anden procesadministrator, betyder det, at dit system bruger et alternativt initieringssystem, og systemctl fungerer ikke, medmindre du migrerer til systemd.
Hvis du ser ældre initialisyringssystemer som Upstart eller SysVinit og gerne vil skifte til systemd for at bruge systemctl, skal du følge disse trin:
1. Installer systemctl ved at installere systemd med følgende kommando:
sudo apt install systemd-sysv
2. Genstart dit system ved at køre denne kommando:
sudo reboot
3. Kontroller, at dit system nu bruger systemd:
ps -p 1 -o comm=
Output'et skal vise systemd.
2. Sikring af, at systemd er installeret korrekt
Under normale omstændigheder, når systemd er installeret og kører som dit init-system, bør systemctl-kommandoen fungere korrekt. Hvis det ikke gør, betyder det, at systemd-pakken enten mangler eller er installeret forkert.
Bemærk, at hvis du bruger en minimal version af Ubuntu, såsom en Docker-container eller cloud-instans, er systemd muligvis ikke installeret som standard. For at installere systemctl ved at installere systemd skal du køre følgende kommandoer:
sudo apt update sudo apt install systemd
Når det er installeret, skal du kontrollere, om systemctl-kommandoen er tilgængelig.
3. Kontrol af systemctl's PATH
Et almindeligt problem med fejlen "systemctl not found" er, at systemctl kunne være installeret, men det er ikke i dit systems PATH. For at kontrollere, om systemd-binaries findes i typiske mappes, hvor det er placeret, såsom /bin, /usr/bin eller /usr/local/bin, kan du bruge følgende kommando:
which systemctl
Hvis systemctl findes i nogen af dine mapper angivet i PATH, bør du få et output som dette:
/usr/bin/systemctl
Hvis systemctl ikke findes i nogen af mapperne i PATH, returnerer which-kommandoen ingenting.
Systemctl virker dog muligvis ikke, selvom det findes i dine mapper. Det skyldes, at systemctl kunne være placeret i en mappe, der ikke er inkluderet i PATH. I denne situation skal du kontrollere, om mappen, hvor systemctl er placeret, er en del af dit system ved at bruge følgende kommando:
echo $PATH
Output'et skal være noget som dette:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Nu skal du blot kontrollere, om mappen, hvor systemctl er placeret (som du fik fra which-kommandoen), er inkluderet i mapperne, der er angivet i output'et fra echo $PATH-kommandoen.
Hvis systemctl's mappe ikke er inkluderet i echo $PATH's output, skal du tilføje den til din PATH-variabel. For at gøre dette skal du køre følgende kommando:
Til Bash shell-brugere, åbn filen ~/.bashrc i en teksteditor:
nano ~/.bashrc
Tilføj følgende linje til slutningen af filen:
export PATH=$PATH:/usr/bin
/usr/bin er et typisk sted, hvor systemctl er placeret i dette eksempel.
Gem og luk filen ved at trykke på CTRL + X, derefter Y for at bekræfte, og Enter for at gemme.
Til Zsh-brugere, Åbn filen ~/.zshrc i en teksteditor:
nano ~/.zshrc
Tilføj følgende linje til slutningen af filen:
export PATH=$PATH:/usr/bin
/usr/bin er et typisk sted, hvor systemctl er placeret i dette eksempel.
Gem og luk filen ved at trykke på CTRL + X, derefter Y for at bekræfte, og Enter for at gemme.
Når du er færdig med ovenstående trin, skal du bruge echo $PATH-kommandoen til at kontrollere, om din systemctl's mappe er blevet tilføjet til din PATH. Nu bør du kunne køre systemctl uden at støde på fejlen "systemctl: command not found".
4. Geninstallation af systemd
Hvis de tidligere rettelser ikke virker, og du stadig får fejlen "command not found", kan en fuldstændig geninstallation af systemd muligvis løse problemet. For at gøre dette skal du køre følgende kommandoer:
sudo apt purge systemd sudo apt install systemd
Genstart derefter dit system med denne kommando:
sudo reboot
Kontroller, om systemctl fungerer.
5. Bekræft, at systemd er korrekt konfigureret
Nogle gange kan problemet være så simpelt som en forkert installeret systemd, hvilket resulterer i fejlen "systemctl: kommando ikke fundet". Alt du skal gøre for at løse det, er at køre følgende kommando, og så er du færdig:
sudo dpkg-reconfigure systemd
6. Forældet Windows-undersystem til Linux (WSL)
I det sjældne tilfælde, at du bruger Ubuntu under WSL (Windows-undersystem til Linux) bør du vide, at ældre versioner af WSL, såsom WSL 1, ikke nativt understøtter systemctl. Så uanset hvilke af de tidligere løsninger du bruger, vil du ikke kunne køre systemctl.
Hvis du vil drage fordel af systemctls funktioner, skal du opgradere til WSL 2, som har bedre understøttelse for systemd. Hvis du er usikker på, om du bruger WSL, kan du kontrollere det med følgende kommando:
uname -a
Hvis outputtet nævner WSL, er det grunden til, at du ser fejlen "systemctl: kommando ikke fundet".
7. Brug sudo service som alternativ til systemctl
Hvis du får fejlen "systemctl: kommando ikke fundet", fordi dit system ikke bruger systemd, kan du bruge kommandoen sudo service til at administrere tjenester. Denne kommando fungerer med ældre init-systemer som SysVinit eller Upstart. Dette er nyttigt til Ubuntu-systemer, der baserer sig på init-scripts i stedet for systemd.
For eksempel, for at starte en tjeneste, ville du køre:
sudo service <service_name> start
Afsluttende tanker
systemd og dets systemctl-kommandolinjeværktøj har erstattet de fleste andre ældre init-systemer som SysVinit og Upstart. Selvom systemd ikke er alles favorit på grund af dets monolitiske design og filosofi, der strider mod Unix-principperne, betragtes systemd stadig generelt som det mest udbredt valg. Forhåbentlig har du således kunnet løse dit problem med, at systemctl-kommandoen ikke er tilgængelig, da manglende adgang til systemds kommandolinjeværktøj alvorligt begrænser dets kapaciteter.
Ofte stillede spørgsmål
Hvad er systemctl, og hvad betyder "systemctl: kommando ikke fundet"?
systemctl er et kommandolinjeværktøj, der bruges til at administrere tjenester på Linux-systemer, der kører systemd, såsom Ubuntu. Fejlen "systemctl: kommando ikke fundet" opstår, når værktøjet ikke er tilgængeligt eller accessible, normalt fordi systemet ikke bruger systemd, eller systemd-pakken ikke er installeret.
Er systemctl tilgængeligt på alle versioner af Ubuntu?
Nej, systemctl er ikke tilgængeligt på alle versioner af Ubuntu. systemctl er en del af systemd init-systemet, som er standard på de fleste moderne Ubuntu-versioner (fra 15.04 og frem). Ældre versioner eller visse minimale installationer bruger muligvis alternative init-systemer som SysVinit eller Upstart i stedet.