Fondamentaux de systemd : Travailler avec les services, les unités et le journal

Introduction

Au cours des dernières années, les distributions Linux ont de plus en plus transitionné des autres systèmes init vers systemd. La suite d’outils systemd offre un modèle d’initialisation rapide et flexible pour gérer une machine entière dès le démarrage.

Dans ce guide, nous vous présenterons rapidement les commandes les plus importantes que vous voudrez connaître pour gérer un serveur activé avec systemd. Elles devraient fonctionner sur n’importe quel serveur qui implémente systemd (toute version de système d’exploitation égale ou supérieure à Ubuntu 15.04, Debian 8, CentOS 7, Fedora 15). Commençons.

Gestion de base des unités

L’objet de base que systemd gère et sur lequel il agit est une « unité ». Les unités peuvent être de nombreux types, mais le type le plus courant est un « service » (indiqué par un fichier d’unité se terminant par .service). Pour gérer les services sur un serveur activé avec systemd, notre principal outil est la commande systemctl.

Toutes les commandes normales du système d’initialisation ont des actions équivalentes avec la commande systemctl. Nous utiliserons l’unité nginx.service pour démontrer (vous devrez installer Nginx avec votre gestionnaire de paquets pour obtenir ce fichier de service).

Par exemple, nous pouvons démarrer le service en tapant:

  1. sudo systemctl start nginx.service

Nous pouvons l’arrêter de nouveau en tapant :

  1. sudo systemctl stop nginx.service

Pour redémarrer le service, nous pouvons taper :

  1. sudo systemctl restart nginx.service

Pour tenter de recharger le service sans interrompre la fonctionnalité normale, nous pouvons taper :

  1. sudo systemctl reload nginx.service

Activation ou désactivation des unités

Par défaut, la plupart des fichiers d’unités systemd ne sont pas démarrés automatiquement au démarrage. Pour configurer cette fonctionnalité, vous devez « activer » l’unité. Cela la relie à une certaine « cible » de démarrage, ce qui la déclenche lorsque cette cible est démarrée.

Pour activer un service afin qu’il démarre automatiquement au démarrage, tapez :

  1. sudo systemctl enable nginx.service

Si vous souhaitez désactiver à nouveau le service, tapez :

  1. sudo systemctl disable nginx.service

Obtenir une vue d’ensemble de l’état du système

Il y a beaucoup d’informations que nous pouvons extraire d’un serveur systemd pour obtenir une vue d’ensemble de l’état du système.

Par exemple, pour obtenir tous les fichiers d’unités que systemd a répertoriés comme « actifs », tapez (vous pouvez en fait omettre le list-units car c’est le comportement par défaut de systemctl) :

  1. systemctl list-units

Pour répertorier toutes les unités que systemd a chargées ou tenté de charger en mémoire, y compris celles qui ne sont pas actuellement actives, ajoutez l’interrupteur --all :

  1. systemctl list-units --all

Pour répertorier toutes les unités installées sur le système, y compris celles que systemd n’a pas essayé de charger en mémoire, tapez :

  1. systemctl list-unit-files

Consultation des informations de journalisation de base

A systemd component called journald collects and manages journal entries from all parts of the system. This is basically log information from applications and the kernel.

Pour voir toutes les entrées de journal, en commençant par la plus ancienne, tapez :

  1. journalctl

Par défaut, cela vous montrera les entrées du démarrage actuel et précédent si journald est configuré pour sauvegarder les enregistrements du démarrage précédent. Certaines distributions activent cela par défaut, tandis que d’autres ne le font pas (pour activer cela, modifiez le fichier /etc/systemd/journald.conf et définissez l’option Storage= sur « persistent », ou créez le répertoire persistant en tapant sudo mkdir -p /var/log/journal).

Si vous souhaitez uniquement voir les entrées du journal du démarrage actuel, ajoutez le drapeau -b :

  1. journalctl -b

Pour voir uniquement les messages du noyau, tels que ceux qui sont généralement représentés par dmesg, vous pouvez utiliser le drapeau -k :

  1. journalctl -k

Encore une fois, vous pouvez limiter cela uniquement au démarrage actuel en ajoutant le drapeau -b :

  1. journalctl -k -b

Interrogation des états des unités et des journaux

Alors que les commandes ci-dessus vous ont donné accès à l’état général du système, vous pouvez également obtenir des informations sur l’état des unités individuelles.

Pour voir un aperçu de l’état actuel d’une unité, vous pouvez utiliser l’option status avec la commande systemctl. Cela vous montrera si l’unité est active, des informations sur le processus et les dernières entrées du journal :

  1. systemctl status nginx.service

Pour voir toutes les entrées du journal pour l’unité en question, utilisez l’option -u avec le nom de l’unité pour la commande journalctl :

  1. journalctl -u nginx.service

Comme toujours, vous pouvez limiter les entrées au démarrage actuel en ajoutant le drapeau -b :

  1. journalctl -b -u nginx.service

Inspection des unités et des fichiers d’unités

À présent, vous savez comment modifier l’état d’une unité en la démarrant ou en l’arrêtant, et vous savez comment afficher l’état et les informations du journal pour avoir une idée de ce qui se passe avec le processus. Cependant, nous n’avons pas encore vu comment inspecter d’autres aspects des unités et des fichiers d’unités.

A unit file contains the parameters that systemd uses to manage and run a unit. To see the full contents of a unit file, type:

  1. systemctl cat nginx.service

Pour voir l’arbre de dépendance d’une unité (les unités que systemd tentera d’activer lors du démarrage de l’unité), tapez :

  1. systemctl list-dependencies nginx.service

Cela affichera les unités dépendantes, avec les unités cibles récursivement développées. Pour étendre toutes les unités dépendantes de manière récursive, passez le drapeau --all:

  1. systemctl list-dependencies --all nginx.service

Enfin, pour voir les détails de bas niveau des paramètres de l’unité sur le système, vous pouvez utiliser l’option show:

  1. systemctl show nginx.service

Cela vous donnera la valeur de chaque paramètre géré par systemd.

Modification des fichiers d’unité

Si vous devez apporter une modification à un fichier d’unité, systemd vous permet de faire des changements à partir de la commande systemctl elle-même afin que vous n’ayez pas à vous rendre à l’emplacement réel sur le disque.

Pour ajouter un extrait de fichier d’unité, qui peut être utilisé pour ajouter ou remplacer des paramètres dans le fichier d’unité par défaut, appelez simplement l’option edit sur l’unité:

  1. sudo systemctl edit nginx.service

Si vous préférez modifier l’intégralité du contenu du fichier d’unité au lieu de créer un extrait, passez le drapeau --full:

  1. sudo systemctl edit --full nginx.service

Après avoir modifié un fichier d’unité, vous devez recharger le processus systemd lui-même pour prendre en compte vos modifications:

  1. sudo systemctl daemon-reload

Utilisation des cibles (niveaux d’exécution)

Une autre fonction d’un système d’initialisation est de faire passer le serveur lui-même entre différents états. Les systèmes d’initialisation traditionnels les désignent généralement sous le nom de « runlevels », permettant au système de n’être que dans un seul runlevel à la fois.

Dans systemd, on utilise plutôt des « cibles » (« targets » en anglais). Les cibles sont essentiellement des points de synchronisation que le serveur peut utiliser pour amener le serveur dans un état spécifique. Les fichiers de service et autres unités peuvent être liés à une cible et plusieurs cibles peuvent être actives en même temps.

Pour voir toutes les cibles disponibles sur votre système, tapez :

  1. systemctl list-unit-files --type=target

Pour afficher la cible par défaut que systemd essaie d’atteindre au démarrage (ce qui démarre ensuite tous les fichiers d’unités qui composent l’arborescence de dépendances de cette cible), tapez :

  1. systemctl get-default

Vous pouvez modifier la cible par défaut qui sera utilisée au démarrage en utilisant l’option set-default :

  1. sudo systemctl set-default multi-user.target

Pour voir quelles unités sont liées à une cible, vous pouvez taper :

  1. systemctl list-dependencies multi-user.target

Vous pouvez modifier l’état du système pour passer d’une cible à une autre avec l’option isolate. Cela arrêtera toutes les unités qui ne sont pas liées à la cible spécifiée. Assurez-vous que la cible que vous isolez n’arrête pas de services essentiels :

  1. sudo systemctl isolate multi-user.target

Arrêt ou Redémarrage du Serveur

Pour certains des principaux états vers lesquels un système peut passer, des raccourcis sont disponibles. Par exemple, pour éteindre votre serveur, vous pouvez taper :

  1. sudo systemctl poweroff

Si vous souhaitez redémarrer le système, vous pouvez le faire en tapant :

  1. sudo systemctl reboot

Vous pouvez démarrer en mode de secours en tapant :

  1. sudo systemctl rescue

Notez que la plupart des systèmes d’exploitation incluent des alias traditionnels pour ces opérations afin que vous puissiez simplement taper sudo poweroff ou sudo reboot sans systemctl. Cependant, cela n’est pas garanti d’être configuré sur tous les systèmes.

Étapes suivantes

À présent, vous devriez connaître les bases de la gestion d’un serveur utilisant systemd. Cependant, il y a beaucoup plus à apprendre à mesure que vos besoins s’élargissent. Ci-dessous se trouvent des liens vers des guides fournissant des informations plus approfondies sur certains des composants que nous avons discutés dans ce guide :

En apprenant à exploiter les points forts de votre système d’initialisation, vous pouvez contrôler l’état de vos machines et gérer plus facilement vos services et processus.

Source:
https://www.digitalocean.com/community/tutorials/systemd-essentials-working-with-services-units-and-the-journal