Uno degli strumenti più potenti e utili per gli utenti di Linux, specialmente nelle distribuzioni moderne come Ubuntu, è comando systemctl. Questo utility a riga di comando viene tipicamente usato per interagire con systemd, il sistema e il gestore dei servizi.
Con il comando puoi gestire i servizi di sistema, visualizzarne lo stato, avviarli o fermarli, e abilitarli o disabilitarli all'avvio del sistema. Piuttosto utile, vero? Ma se il comando systemctl non viene trovato o riconosciuto, incontrerai l'errore "sudo: systemctl: command not found" errore.
Vediamo cosa significa l'errore "systemctl: command not found", i vari motivi per cui lo stai riscontrando, e come risolverlo.
Cosa significa systemctl: Command Not Found?
In sostanza, l'errore "systemctl: command not found" significa che l'utility a riga di comando systemctl non è disponibile o accessibile nell'ambiente corrente. Questo può dipendere da vari motivi, tutti riconducibili a un ambiente non-system oppure al fatto che il pacchetto systemd non è installato sul sistema.
In pratica, il pacchetto systemd non è installato, oppure la tua distribuzione o versione di Linux non usa systemd, bensì sistemi di gestione dei servizi più vecchi come init.d. Un'altra possibilità è che la variabile di ambiente PATH non includa la directory dove si trova systemctl, quindi la shell non riesce a trovarla.
Ora che hai un'idea di cosa potrebbe non funzionare nel tuo sistema e causare l'errore "systemctl: command not found", vediamo come verificare dove si trova il problema e come risolverlo.
Risolvere l'errore systemctl: Command Not Found
Nei passaggi seguenti verificheremo se il tuo sistema ha systemd installato e usa systemctl, e controlleremo il percorso di systemctl. Una volta confermato il problema, prenderemo i passi necessari per risolverlo.
1. Verificare se il sistema usa systemd
Poiché systemctl in Ubuntu può essere usato solo se hai il pacchetto systemd installato, prima verificheremo se il tuo sistema deve usare systemd eseguendo il comando seguente:
ps -p 1 -o comm=
Oppure puoi controllare la versione di systemd con il comando seguente:
systemd --version
Se l'output è systemd, allora systemd è il tuo sistema di init e dovrebbe avere systemctl installato in Ubuntu. Invece, se l'output è init o un altro gestore di processi, significa che il tuo sistema usa 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 vuoi passare a systemd per usare systemctl, segui questi passaggi:
1. Installa systemctl installando systemd con il seguente comando:
sudo apt install systemd-sysv
2. Riavvia il sistema eseguendo questo comando:
sudo reboot
3. Verifica che il sistema stia ora utilizzando systemd:
ps -p 1 -o comm=
L'output dovrebbe mostrare systemd.
2. Verificare che systemd sia installato correttamente
In condizioni normali, quando systemd è installato e in esecuzione come init system, il comando systemctl dovrebbe funzionare correttamente. Se non funziona, significa che il pacchetto systemd manca o è stato installato in modo non corretto.
Se stai utilizzando una versione minimale di Ubuntu, come un container Docker o un'istanza cloud, systemd potrebbe non essere stato installato di default. Per installare systemctl installando systemd, esegui questi comandi:
sudo apt update sudo apt install systemd
Una volta installato, verifica che il comando systemctl sia disponibile.
3. Controllare il PATH di systemctl
Un problema comune con l'errore systemctl not found è che systemctl potrebbe essere installato, ma non si trova nel PATH del sistema. Per verificare se i binari di systemd si trovano nelle directory tipiche come /bin, /usr/bin o /usr/local/bin, puoi usare questo comando:
which systemctl
Se systemctl si trova in una delle tue directory nel PATH, dovresti ottenere un output come questo:
/usr/bin/systemctl
Se systemctl non si trova in nessuna delle directory nel PATH, il comando which non restituirà nulla.
Tuttavia, systemctl potrebbe non funzionare anche se si trova nelle tue directory. Questo accade perché systemctl potrebbe trovarsi in una directory non inclusa nel PATH. In questo caso, devi verificare se la directory in cui si trova systemctl fa parte del sistema usando questo comando:
echo $PATH
L'output dovrebbe essere qualcosa del genere:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Ora, tutto quello che devi fare è verificare se la directory in cui si trova systemctl (quella ottenuta dal comando which) è inclusa nelle directory mostrate dall'output del comando echo $PATH.
Se la directory di systemctl non è inclusa nell'output di echo $PATH, dovrai aggiungerla alla variabile PATH. Per farlo, esegui questo 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, poi 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, poi Y per confermare e Invio per salvare.
Una volta completati i passaggi precedenti, usa il comando echo $PATH per verificare che la directory di systemctl sia stata aggiunta al tuo PATH. Ora dovresti essere in grado di eseguire systemctl senza incontrare l'errore "systemctl: command not found".
4. Reinstallazione di systemd
Se i fix precedenti non funzionano e continui a ricevere l'errore command not found, reinstallare completamente systemd potrebbe risolvere il problema. Per farlo, esegui questi comandi:
sudo apt purge systemd sudo apt install systemd
Poi, riavvia il sistema con questo comando:
sudo reboot
Verifica che systemctl funzioni correttamente.
5. Verifica che systemd sia configurato correttamente
A volte il problema potrebbe essere una semplice configurazione errata di systemd, che genera l'errore "systemctl: command not found". Per risolvere, esegui questo comando e il problema è risolto:
sudo dpkg-reconfigure systemd
6. Versione obsoleta di Windows Subsystem for Linux (WSL)
Nel caso tu stia usando Ubuntu con WSL (Sottosistema Windows per Linux) dovresti sapere che le versioni precedenti di WSL, come WSL 1, non supportano nativamente systemctl. Indipendentemente dalla soluzione che usi, non potrai eseguire systemctl.
Per sfruttare le funzioni di systemctl, devi eseguire l'upgrade a WSL 2, che offre un supporto migliore per systemd. Se non sei sicuro quale versione usi, puoi verificare con questo comando:
uname -a
Se l'output contiene WSL, allora ecco perché vedi l'errore "systemctl: command not found".
7. Usare sudo service come alternativa a systemctl
Se ricevi l'errore "systemctl: command not found" perché il tuo sistema non usa systemd, puoi usare il comando sudo service per gestire i servizi. Questo comando funziona con i sistemi init più vecchi come SysVinit o Upstart. È utile per i sistemi Ubuntu che si basano su script init invece di systemd.
Ad esempio, per avviare un servizio, esegui:
sudo service <service_name> start
Considerazioni Finali
systemd e il suo comando systemctl hanno sostituito la maggior parte degli altri sistemi init come SysVinit e Upstart. Anche se systemd non piace a tutti a causa del suo design monolitico e della filosofia non-Unix, rimane la scelta più diffusa. Speriamo di aver risolto il tuo errore "systemctl: command not found", perché non poter usare l'utilità da riga di comando di systemd limita notevolmente le sue capacità.
Domande frequenti
Cos'è systemctl e cosa significa l'errore "systemctl: Command Not Found"?
systemctl è uno strumento da riga di comando per gestire i servizi nei sistemi Linux che eseguono systemd, come Ubuntu. L'errore "systemctl: command not found" si verifica quando lo strumento non è disponibile o accessibile, di solito perché il sistema non usa 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 init systemd, che è quello predefinito nella maggior parte delle versioni moderne di Ubuntu (dalla 15.04 in poi). Le versioni precedenti o alcune installazioni minimali potrebbero usare sistemi init alternativi come SysVinit o Upstart.