L'un des outils les plus utiles pour les utilisateurs de Linux, notamment sur les distributions modernes comme Ubuntu, est la commande systemctl. Cet utilitaire en ligne de commande sert principalement à interagir avec systemd, le gestionnaire de système et de services.
Grâce à cette commande, vous pouvez gérer les services système, consulter leur état, les démarrer ou les arrêter, et les activer ou désactiver au démarrage. Très pratique, non ? Mais si la commande systemctl est introuvable ou non reconnue, vous vous retrouverez face à l'erreur "sudo:systemctl: command not found" .
Voyons ce que signifie l'erreur "systemctl: command not found", les différentes raisons pour lesquelles vous la rencontrez, et comment la corriger.
Que signifie l'erreur systemctl : command not found ?
En clair, l'erreur "systemctl: command not found" indique que l'utilitaire systemctl n'est pas disponible ou accessible dans l'environnement actuel. Cela peut avoir plusieurs causes, qui se résument à deux situations : soit l'environnement n'est pas un environnement système standard, soit le paquet systemd n'est pas installé.
Concrètement, soit le paquet systemd n'est pas installé, soit votre distribution ou version de Linux n'utilise pas systemd et repose sur d'anciens systèmes de gestion des services comme init.d. Une autre possibilité : la variable d'environnement PATH n'inclut pas le répertoire où se trouve systemctl, ce qui empêche votre shell de le localiser.
Maintenant que vous avez une idée de ce qui pourrait causer l'erreur « systemctl: command not found » sur votre système, voyons comment identifier la source du problème et le résoudre.
Résoudre l'erreur systemctl: Command Not Found
Dans les étapes suivantes, nous allons vérifier si systemd est installé sur votre système et si systemctl est disponible, ainsi que contrôler le PATH de systemctl. Une fois le problème identifié, nous prendrons les mesures nécessaires pour le corriger.
1. Vérifier si votre système utilise systemd
Comme Ubuntu systemctl ne fonctionne que si le paquet systemd est installé, nous allons d'abord vérifier si votre système est censé utiliser systemd en exécutant la commande suivante :
ps -p 1 -o comm=
Vous pouvez aussi vérifier la version de systemd avec la commande suivante :
systemd --version
Si la sortie affiche systemd, alors systemd est votre système d'initialisation et Ubuntu systemctl devrait être installé. En revanche, si la sortie affiche init ou un autre gestionnaire de processus, cela signifie que votre système utilise un système d'initialisation alternatif, et systemctl ne fonctionnera pas tant que vous n'aurez pas migré vers systemd.
Si vous voyez des systèmes d'initialisation plus anciens comme Upstart ou SysVinit et souhaitez passer à systemd pour utiliser systemctl, suivez ces étapes :
1. Installez systemctl en installant systemd à l'aide de la commande suivante :
sudo apt install systemd-sysv
2. Redémarrez votre système en exécutant cette commande :
sudo reboot
3. Vérifiez que votre système utilise bien maintenant systemd :
ps -p 1 -o comm=
La sortie devrait maintenant afficher systemd.
2. S'assurer que systemd est correctement installé
Dans des conditions normales, lorsque systemd est installé et fonctionne comme système d'initialisation, la commande systemctl devrait fonctionner correctement. Si ce n'est pas le cas, cela signifie que le paquet systemd est absent ou mal installé.
Notez que si vous utilisez une version minimale de Ubuntu, comme un conteneur Docker ou une instance cloud, systemd n'est peut-être pas installé par défaut. Pour installer systemctl via l'installation de systemd, exécutez les commandes suivantes :
sudo apt update sudo apt install systemd
Une fois installé, vérifiez que la commande systemctl est disponible.
3. Vérifier le PATH de systemctl
Un problème courant lié à l'erreur systemctl not found est que systemctl peut être installé sans pour autant figurer dans le PATH de votre système. Pour vérifier si les binaires de systemd sont présents dans les répertoires habituels, comme /bin, /usr/bin ou /usr/local/bin, utilisez la commande suivante :
which systemctl
Si systemctl est trouvé dans l'un des répertoires listés dans le PATH, vous obtiendrez une sortie de ce type :
/usr/bin/systemctl
Si systemctl n'est trouvé dans aucun des répertoires du PATH, la commande which ne retournera rien.
Cependant, systemctl peut ne pas fonctionner même s'il est trouvé dans vos répertoires. En effet, systemctl peut se trouver dans un répertoire qui n'est pas inclus dans le PATH. Dans ce cas, vous devrez vérifier si le répertoire où se trouve systemctl fait partie de votre PATH en exécutant la commande suivante :
echo $PATH
La sortie devrait ressembler à ceci :
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Il vous suffit ensuite de vérifier si le répertoire dans lequel se trouve systemctl (obtenu via la commande which) figure parmi les répertoires listés dans la sortie de la commande echo $PATH.
Si le répertoire de systemctl n'apparaît pas dans la sortie de echo $PATH, vous devrez l'ajouter à votre variable PATH. Pour ce faire, exécutez la commande suivante :
Pour Utilisateurs du shell Bash, ouvrez le fichier ~/.bashrc dans un éditeur de texte :
nano ~/.bashrc
Ajoutez la ligne suivante à la fin du fichier :
export PATH=$PATH:/usr/bin
/usr/bin est un répertoire typique où se trouve systemctl dans cet exemple.
Enregistrez ensuite le fichier en appuyant sur CTRL + X, puis Y pour confirmer, et Entrée pour valider.
Pour Utilisateurs de Zsh, ouvrez le fichier ~/.zshrc dans un éditeur de texte :
nano ~/.zshrc
Ajoutez la ligne suivante à la fin du fichier :
export PATH=$PATH:/usr/bin
/usr/bin est un répertoire typique où se trouve systemctl dans cet exemple.
Enregistrez ensuite le fichier en appuyant sur CTRL + X, puis Y pour confirmer, et Entrée pour valider.
Une fois ces étapes terminées, utilisez la commande echo $PATH pour vérifier que le répertoire de systemctl a bien été ajouté à votre PATH. Vous devriez maintenant pouvoir exécuter systemctl sans rencontrer l'erreur « systemctl: command not found ».
4. Réinstaller systemd
Si les corrections précédentes n'ont pas fonctionné et que vous rencontrez toujours l'erreur command not found, réinstaller systemd complètement peut résoudre le problème. Pour ce faire, exécutez les commandes suivantes :
sudo apt purge systemd sudo apt install systemd
Ensuite, redémarrez votre système avec cette commande :
sudo reboot
Vérifiez que systemctl fonctionne correctement.
5. Vérifier que systemd est correctement configuré
Le problème vient parfois d'une installation mal configurée de systemd, ce qui entraîne l'erreur « systemctl: command not found ». Pour corriger cela, il suffit d'exécuter la commande suivante :
sudo dpkg-reconfigure systemd
6. Sous-système Windows pour Linux (WSL) obsolète
Si vous utilisez Ubuntu sous WSL (sous-système Windows pour Linux) sachez que les anciennes versions de WSL, comme WSL 1, ne prennent pas en charge systemctl nativement. Aucune des corrections précédentes ne vous permettra donc d'exécuter systemctl.
Pour utiliser les fonctionnalités de systemctl, vous devrez passer à WSL 2, qui offre une meilleure prise en charge de systemd. Si vous n'êtes pas sûr d'utiliser WSL, vérifiez-le avec la commande suivante :
uname -a
Si la sortie mentionne WSL, c'est la raison pour laquelle vous voyez l'erreur « systemctl: command not found ».
7. Utiliser sudo service comme alternative à systemctl
Si vous obtenez l'erreur « systemctl: command not found » parce que votre système n'utilise pas systemd, vous pouvez gérer vos services avec la commande sudo service. Cette commande fonctionne avec les anciens systèmes d'init comme SysVinit ou Upstart. Elle est particulièrement utile sur les systèmes Ubuntu qui s'appuient sur des scripts d'init plutôt que sur systemd.
Par exemple, pour démarrer un service, exécutez :
sudo service <service_name> start
Conclusion
systemd et son utilitaire en ligne de commande systemctl ont remplacé la plupart des anciens systèmes d'init comme SysVinit et Upstart. Bien que systemd ne fasse pas l'unanimité en raison de sa conception monolithique et de sa philosophie non-Unix, il reste le choix le plus répandu. Vous devriez maintenant avoir résolu votre erreur systemctl command not available : ne pas pouvoir utiliser l'utilitaire en ligne de commande de systemd en limite considérablement les capacités.
Questions fréquemment posées
Qu'est-ce que systemctl et que signifie l'erreur systemctl: command not found ?
systemctl est un outil en ligne de commande permettant de gérer les services sur les systèmes Linux exécutant systemd, comme Ubuntu. L'erreur « systemctl: command not found » apparaît lorsque l'outil n'est pas disponible ou accessible, généralement parce que le système n'utilise pas systemd ou que le paquet systemd n'est pas installé.
Ubuntu dispose-t-il de systemctl dans toutes ses versions ?
Non, systemctl n'est pas disponible dans toutes les versions de Ubuntu. systemctl fait partie du système d'initialisation systemd, qui est le système par défaut dans la plupart des versions modernes de Ubuntu (à partir de la 15.04). Les versions plus anciennes ou certaines installations minimales peuvent utiliser des systèmes d'initialisation alternatifs comme SysVinit ou Upstart.