Uno degli strumenti più potenti e utili per gli utenti Linux, in particolare per le distribuzioni moderne come Ubuntu, è il comando systemctl. Questa utilità della riga di comando viene in genere utilizzata per interagire con systemd, il sistema e il gestore del servizio.
Tramite il comando è possibile gestire i servizi di sistema, visualizzarne lo stato, avviarli o interromperli e abilitarli e disabilitarli all'avvio del sistema. Abbastanza utile, vero? Ma se il comando systemctl non viene trovato o riconosciuto, dovrai affrontare il problema “sudo:systemctl: comando non trovato” errore.
Quindi, parliamo di cosa significa l'errore "systemctl: comando non trovato", dei vari motivi per cui stai riscontrando questo errore e come risolverlo.
Cosa significa systemctl: comando non trovato?
In poche parole, l'errore "systemctl: comando non trovato" significa che l'utilità della riga di comando systemctl non è disponibile o accessibile nell'ambiente corrente. Ciò può essere dovuto a una serie di ragioni, tutte riconducibili al fatto che l'ambiente non è di sistema o che il pacchetto systemd non è installato sul sistema.
Fondamentalmente, il pacchetto systemd non è installato oppure la tua distribuzione o versione Linux non utilizza systemd; piuttosto, utilizza sistemi di gestione dei servizi più vecchi come init.d. Un'altra possibilità è che la variabile d'ambiente PATH non includa la directory in cui si trova systemctl, il che significa che la tua shell non riesce a trovarla.
Ora che hai un'idea di cosa potrebbe esserci di sbagliato nel tuo sistema, che porta all'errore "systemctl: comando non trovato", diamo un'occhiata a come puoi verificare dove si trova il tuo problema e come risolverlo.
Correzione del systemctl: errore comando non trovato
Nei passaggi seguenti, verificheremo se il tuo sistema ha systemd installato e utilizza systemctl o meno, oltre a controllare il percorso di systemctl. Una volta verificato il problema, adotteremo le misure necessarie per correggere l'errore.
1. Verifica se il tuo sistema utilizza systemd
Poiché Ubuntu systemctl può essere utilizzato solo se hai installato il pacchetto systemd, controlleremo prima se il tuo sistema dovrebbe utilizzare systemd eseguendo il seguente comando:
ps -p 1 -o comm=
Oppure puoi controllare la versione di systemd con il seguente comando:
systemd --version
Se l'output è systemd, allora systemd è il tuo sistema init e dovrebbe avere Ubuntu systemctl installato. Tuttavia, se l'output è init o un altro gestore di processi, significa che il tuo sistema sta utilizzando un sistema di inizializzazione alternativo e systemctl non funzionerà a meno che non migri a systemd.
Se vedi sistemi di inizializzazione più vecchi come Upstart o SysVinit e desideri passare a systemd per utilizzare systemctl, segui questi passaggi:
1. Installa systemctl installando systemd utilizzando il seguente comando:
sudo apt install systemd-sysv
2. Riavvia il sistema eseguendo questo comando:
sudo reboot
3. Verifica che il tuo sistema stia ora utilizzando systemd:
ps -p 1 -o comm=
L'output dovrebbe essere systemd ora.
2. Assicurarsi che systemd sia installato correttamente
In circostanze normali, quando systemd è installato ed è in esecuzione come sistema init, il comando systemctl dovrebbe funzionare correttamente. In caso contrario, significa che il pacchetto systemd è mancante o installato in modo errato.
Tieni presente che se stai utilizzando una versione minima di Ubuntu, come un contenitore Docker o un'istanza cloud, systemd potrebbe non essere stato installato per impostazione predefinita. Per installare systemctl tramite l'installazione di systemd, eseguire i seguenti comandi:
sudo apt update sudo apt install systemd
Una volta installato, controlla se il comando systemctl è disponibile.
3. Controllo del PERCORSO di systemctl
Un problema comune con l'errore systemctl non trovato è che systemctl potrebbe essere installato, ma non è nel PERCORSO del sistema. Per verificare se i binari di systemd esistono o meno nelle directory tipiche in cui si trovano, come /bin, /usr/bin o /usr/local/bin, puoi utilizzare il seguente comando:
which systemctl
Se systemctl viene trovato in una qualsiasi delle directory elencate in PATH, dovresti ottenere un output come questo:
/usr/bin/systemctl
Se systemctl non viene trovato in nessuna delle directory del PATH, il comando which non restituirà nulla.
Tuttavia, systemctl potrebbe non funzionare anche se si trova nelle tue directory. Questo perché systemctl potrebbe trovarsi in una directory non inclusa nel PERCORSO. In questa situazione, dovrai verificare se la directory in cui si trova systemctl fa parte del tuo sistema utilizzando il seguente comando:
echo $PATH
L'output dovrebbe essere qualcosa del genere:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Ora, tutto ciò che devi fare è verificare se la directory in cui risiede systemctl (che hai ottenuto dal comando which) è inclusa nelle directory elencate nell'output del comando echo $PATH.
Se la directory di systemctl non è inclusa nell'output di echo $PATH, dovrai aggiungerla alla variabile PATH. Per fare ciò, dovrai eseguire il seguente comando:
Per Utenti della shell Bash, apri il file ~/.bashrc in un editor di testo:
nano ~/.bashrc
Aggiungi la seguente riga alla fine del file:
export PATH=$PATH:/usr/bin
/usr/bin è una directory tipica in cui si trova systemctl in questo esempio.
Ora salva e chiudi il file premendo CTRL + X, quindi Y per confermare e Invio per salvare.
Per Utenti Zsh, Apri il file ~/.zshrc in un editor di testo:
nano ~/.zshrc
Aggiungi la seguente riga alla fine del file:
export PATH=$PATH:/usr/bin
/usr/bin è una directory tipica in cui si trova systemctl in questo esempio.
Ora salva e chiudi il file premendo CTRL + X, quindi Y per confermare e Invio per salvare.
Una volta terminati i passaggi precedenti, utilizza il comando echo $PATH per verificare se la directory systemctl è stata aggiunta al tuo PATH. Ora dovresti essere in grado di eseguire systemctl senza incorrere nell'errore "systemctl: comando non trovato".
4. Reinstallazione di systemd
Se le soluzioni precedenti non funzionano e riscontri ancora l'errore comando non trovato, reinstallare completamente systemd potrebbe risolvere il problema. Per fare ciò, esegui i seguenti comandi:
sudo apt purge systemd sudo apt install systemd
Quindi riavvia il sistema con questo comando:
sudo reboot
Controlla se systemctl funziona.
5. Verificare che systemd sia configurato correttamente
A volte, il problema potrebbe essere semplice come un'installazione non configurata correttamente di systemd, che risulta in un errore "systemctl: comando non trovato". Tutto quello che devi fare per risolvere questo problema è eseguire il seguente comando e il gioco è fatto:
sudo dpkg-reconfigure systemd
6. Sottosistema Windows per Linux (WSL) obsoleto
Nella remota possibilità che tu stia utilizzando Ubuntu con WSL (sottosistema Windows per Linux) dovresti sapere che le versioni precedenti di WSL, come WSL 1, non supportano nativamente systemctl, quindi non importa quale delle correzioni precedenti utilizzi, non sarai in grado di eseguire systemctl.
Se vuoi sfruttare le funzioni di systemctl, dovrai eseguire l'aggiornamento a WSL 2, che ha un supporto migliore per systemd. Se non sei sicuro di utilizzare o meno WSL, puoi verificare utilizzando il seguente comando:
uname -a
Se l'output menziona WSL, è per questo che viene visualizzato l'errore "systemctl: comando non trovato".
7. Utilizzo del servizio sudo come alternativa a systemctl
Se stai riscontrando l'errore "systemctl: comando non trovato" perché il tuo sistema non utilizza systemd, puoi utilizzare il comando sudo service per gestire i servizi. Questo comando funziona con i sistemi init più vecchi come SysVinit o Upstart. Ciò è utile per i sistemi Ubuntu che si basano sugli script init anziché su systemd.
Ad esempio, per avviare un servizio, dovresti eseguire:
sudo service <service_name> start
Considerazioni finali
systemd e la sua utility da riga di comando systemctl hanno sostituito la maggior parte degli altri vecchi sistemi init come SysVinit e Upstart. Anche se systemd potrebbe non essere adatto a tutti a causa del suo design monolitico e della filosofia non Unix, systemd è ancora generalmente considerato la scelta prevalente. Quindi, si spera, sei stato in grado di risolvere il tuo errore systemctl comando non disponibile, poiché non essere in grado di utilizzare l'utilità della riga di comando di systemd limita gravemente le sue capacità.
Domande frequenti
Che cosa è systemctl e cosa significa systemctl: comando non trovato?
systemctl è uno strumento da riga di comando utilizzato per gestire i servizi nei sistemi Linux che eseguono systemd, come Ubuntu. L'errore "systemctl: comando non trovato" si verifica quando lo strumento non è disponibile o accessibile, solitamente perché il sistema non utilizza systemd o il pacchetto systemd non è installato.
systemctl è disponibile su tutte le versioni di Ubuntu?
No, systemctl non è disponibile su tutte le versioni di Ubuntu. systemctl fa parte del sistema systemd init, che è l'impostazione predefinita nella maggior parte delle moderne versioni di Ubuntu (dalla 15.04 in poi). Le versioni precedenti o alcune installazioni minime possono invece utilizzare sistemi init alternativi come SysVinit o Upstart.