Le gestionnaire de systèmes et de services par défaut de la plupart des distributions Linux est désormais systemd.

Le processus systemd remplace l’init SysV. Il s’exécute en tant que premier processus après le démarrage du noyau et est chargé d’amener l’hôte Linux à l’état où il peut être utilisé. Il est responsable du démarrage et de la gestion des services, du montage des systèmes de fichiers, de la gestion du matériel, de la génération de l’invite de connexion et de bien d’autres choses encore.

L’un des principaux avantages par rapport à SysV est que systemd démarre autant de services que possible en parallèle, ce qui accélère le processus de démarrage et fait apparaître l’écran de connexion plus rapidement.

Unités

Les éléments gérés par systemd sont appelés unités. Les fichiers d’unités sont situés dans /lib/systemd/system.

Unités de service

Pour la gestion des services, les unités cibles sont les unités de service, dont les fichiers d’unité ont un suffixe .service.

Gestion des services systemd

La commande permettant de gérer les unités systemd est systemctl.

Démarrage et arrêt des services

Pour démarrer un service systemd, utilisez la commande systemctl start :

sudo systemctl start nom.service

Vous pouvez laisser le suffixe .service. Par exemple, pour démarrer le serveur apache sur Ubuntu :

$ sudo systemctl start apache2

Pour arrêter un service en cours d’exécution :

$ sudo systemctl stop nom.service

Ainsi, pour arrêter le serveur apache sous Ubuntu :

$ sudo systemctl stop apache2

Redémarrage et rechargement des services

Pour redémarrer un service en cours d’exécution, utilisez la commande restart :

$ sudo systemctl restart nom.service

Et lorsque le seul rechargement du fichier de configuration est nécessaire

$ sudo systemctl reload nom.service

Activation et désactivation des services

Si vous souhaitez qu’un service démarre automatiquement au démarrage du système, utilisez la commande enable :

sudo systemctl enable nom.service

Pour empêcher un service de démarrer au démarrage du système, utilisez la commande enable : $ sudo systemctl enable name.service

$ sudo systemctl disable name.service

La désactivation n’arrête pas un service en cours d’exécution.

Affichage de l’état d’un service

Pour afficher des informations sur un service :

sudo systemctl status nom.service

Cela vous montrera l’état du service et les premières lignes du fichier journal. Ainsi, lorsque le service est en cours d’exécution, la sortie de

sudo systemctl status apache2

est

apache2.service - Le serveur HTTP Apache
   Chargé : chargé (/lib/systemd/system/apache2.service ; enabled ; vendor preset : enabled)
  Drop-In : /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active : active (running) since Tue 2020-05-19 22:11:36 UTC ; 4 days ago
  Process : 116002 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/SUCCESS)
PID principal : 104165 (apache2)
    Tâches : 55 (limite : 1024)
   CGroup : /system.slice/apache2.service
           ├─104165 /usr/sbin/apache2 -k start
           ├─116006 /usr/sbin/apache2 -k start
           └─116007 /usr/sbin/apache2 -k start

May 19 22:11:36 ubuntu18 systemd<x><x><x><x>[1]</x></x></x></x>: Démarrage du serveur HTTP Apache...
May 19 22:11:36 ubuntu18 systemd<x><x><x><x>[1]</x></x></x></x>: Démarrage du serveur HTTP Apache.
21 mai 06:25:01 ubuntu18 systemd<x><x><x><x>[1]</x></x></x></x>: Rechargement du serveur HTTP Apache.
May 21 06:25:01 ubuntu18 systemd<x><x><x><x>[1]</x></x></x></x>: Rechargement du serveur HTTP Apache.
May 22 06:25:01 ubuntu18 systemd<x><x><x><x>[1]</x></x></x></x>: Rechargement du serveur HTTP Apache.

Pour vérifier si un service est actif :

sudo systemctl is-active nom.service

Ainsi, lorsque le service apache2 est en cours d’exécution, la sortie de la commande systemctl is-active est la suivante :

$ sudo systemctl is-active apache2
actif

Pour vérifier si un service est activé :

$ sudo systemctl is-enabled nom.service.

Visualisation de l’état du système

Toutes les commandes que vous avez vues jusqu’à présent sont utilisées pour gérer un seul service. Lorsque vous souhaitez avoir une vue d’ensemble de l’état du système, utilisez les commandes suivantes :

Pour voir tous les types d’unités

sudo systemctl -t help
Types d'unités disponibles :
service
socket
cible
périphérique
montage
automount
swap
minuterie
chemin
tranche
scope

Pour obtenir la liste de toutes les unités installées, utilisez list-unit-files

sudo systemctl list-unit-files
ÉTAT DU FICHIER DE L'UNITÉ        
proc-sys-fs-binfmt_misc.automount statique        
-.mount généré      
boot-efi.mount généré      
dev-hugepages.mount statique        
dev-mqueue.mount statique        
mnt.mount généré      
proc-sys-fs-binfmt_misc.mount statique        
sys-fs-fuse-connections.mount static      
sys-kernel-config.mount static      
sys-kernel-debug.mount static      
acpid.path activé       
apport-autoreport.path activé       
systemd-ask-password-console.path statique        
systemd-ask-password-plymouth.path static      
systemd-ask-password-wall.path static      
session-161.scope transient      
accounts-daemon.service activé       

La sortie ne comporte que deux colonnes : Unit File (fichier d’unité) et State (état). L’état est généralement activé, désactivé, statique ou masqué.

  • Statique: Cela signifie que l’unité ne peut pas être activée, qu’elle effectue une action unique ou qu’elle dépend d’une autre unité et ne peut pas être exécutée seule.
  • Masquée : Une unité répertoriée comme masquée signifie qu’elle ne peut pas être démarrée, car elle est liée à /dev/null. C’est ce qu’on appelle masquer l’unité. Cela empêche le service d’être démarré, manuellement ou automatiquement.

Liste de tous les services installés

La commande systemctl list-unit-files avec le filtre -t ou -type service affiche uniquement l’état des services installés.

sudo systemctl list-unit-files -t service
ÉTAT DU FICHIER D'UNITÉ    
accounts-daemon.service enabled  
acpid.service désactivé 
apache-htcacheclean.service désactivé 
apache-htcacheclean@.service désactivé 
apache2.service enabled  
apache2@.service désactivé 
apparmor.service activé  
apport-autoreport.service static   
apport-forward@.service static   
apport.service généré
apt-daily-upgrade.service static   
apt-daily.service static   
atd.service activé  
autovt@.service activé  
blk-availability.service activé  
bootlogd.service masqué   
bootlogs.service masqué   

Pour voir toutes les unités de service actives, utilisez list-units avec le filtre -t service

sudo systemctl list-units -t service
UNIT LOAD ACTIVE SUB DESCRIPTION           
  accounts-daemon.service chargé actif en cours d'exécution Service des comptes       
  apache2.service loaded active running Le serveur HTTP Apache      
  apparmor.service chargé actif exité Initialisation d'AppArmor          
  apport.service chargé actif exité LSB : génération automatique de rapports de crash  
  atd.service chargé activement en cours d'exécution Ordonnanceur d'exécution différée          
  blk-availability.service loaded active exited Disponibilité des périphériques de bloc    
  cloud-config.service loaded active exited Appliquer les paramètres spécifiés dans cloud-con
  cloud-final.service loaded active exited Exécution des scripts utilisateur/final du nuage     
  cloud-init-local.service loaded active exited Travail initial de cloud-init (avant la mise en réseau) 
  cloud-init.service loaded active exited Tâche initiale de cloud-init (service de métadonnées) 
  console-setup.service chargé actif quitté Définir la police et le clavier de la console       
  cron.service loaded active running Programme d'arrière-plan régulier traitant les données

La sortie comporte les colonnes suivantes :

  • UNIT: Le nom de l’unité de service systemd
  • LOAD: Indique si la définition de l’unité a été correctement lue et chargée
  • ACTIVE: Indique si l’unité est active.
  • SUB: état d’activation de bas niveau de l’unité, donnant des informations plus détaillées sur l’unité. Cet état varie selon le type d’unité.
  • DESCRIPTION: Description de l’unité de service.

Conclusion

J’espère que cela vous a donné une idée de l’utilisation de systemctl pour gérer les services sous Linux. Si vous souhaitez en savoir plus, vous pouvez consulter ce cours Linux Mastery.