Systemd Essentials : Travailler avec les services, les unités et le journal

De Get Docs
Aller à :navigation, rechercher

Introduction

Ces dernières années, les distributions Linux sont de plus en plus passées d'autres systèmes d'initialisation à systemd. La suite d'outils systemd fournit un modèle d'initialisation rapide et flexible pour gérer une machine entière à partir du démarrage.

Dans ce guide, nous vous donnerons un aperçu rapide des commandes les plus importantes que vous voudrez connaître pour gérer un serveur compatible systemd. Ceux-ci 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 d'unité de base

L'objet de base sur lequel systemd gère et agit est une "unité". Les unités peuvent être de plusieurs 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 compatible systemd, notre outil principal est la commande systemctl.

Toutes les commandes normales du système init 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 packages pour obtenir ce fichier de service).

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

sudo systemctl start nginx.service

On peut l'arrêter à nouveau en tapant :

sudo systemctl stop nginx.service

Pour redémarrer le service, on peut taper :

sudo systemctl restart nginx.service

Pour tenter de recharger le service sans interrompre les fonctionnalités normales, nous pouvons taper :

sudo systemctl reload nginx.service

Activation ou désactivation des unités

Par défaut, la plupart des fichiers d'unité systemd ne sont pas lancés automatiquement au démarrage. Pour configurer cette fonctionnalité, vous devez "activer" l'unité. Cela le relie à une certaine "cible" de démarrage, provoquant son déclenchement lorsque cette cible est démarrée.

Pour permettre à un service de démarrer automatiquement au démarrage, tapez :

sudo systemctl enable nginx.service

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

sudo systemctl disable nginx.service

Obtenir un aperçu de l'état du système

Il existe de nombreuses informations que nous pouvons extraire d'un serveur systemd pour obtenir un aperçu de l'état du système.

Par exemple, pour obtenir tous les fichiers d'unité que systemd a répertoriés comme "actifs", tapez (vous pouvez en fait omettre list-units car il s'agit du comportement par défaut de systemctl ):

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 le commutateur --all :

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 :

systemctl list-unit-files

Affichage des informations de journal de base

Un composant systemd appelé journald collecte et gère les entrées de journal de toutes les parties du système. Il s'agit essentiellement des informations de journal des applications et du noyau.

Pour voir toutes les entrées du journal, en commençant par l'entrée la plus ancienne, tapez :

journalctl

Par défaut, cela vous montrera les entrées des démarrages actuels et précédents si journald est configuré pour enregistrer les enregistrements de démarrage précédents. Certaines distributions l'activent par défaut, tandis que d'autres ne le font pas (pour l'activer, éditez le fichier /etc/systemd/journald.conf et définissez l'option Storage= sur « persistant », ou créez le répertoire persistant en tapant [X202X ]).

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

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 :

journalctl -k

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

journalctl -k -b

Interrogation des états d'unité et des journaux

Bien que les commandes ci-dessus vous donnent 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 de journal :

systemctl status nginx.service

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

journalctl -u nginx.service

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

journalctl -b -u nginx.service

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

À 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 les informations d'état et de journalisation 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é.

Un fichier d'unité contient les paramètres que systemd utilise pour gérer et exécuter une unité. Pour voir le contenu complet d'un fichier d'unité, tapez :

systemctl cat nginx.service

Pour voir l'arborescence des dépendances d'une unité (quelles unités systemd tenteront d'activer lors du démarrage de l'unité), tapez :

systemctl list-dependencies nginx.service

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

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 :

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 d'apporter des modifications à partir de la commande systemctl elle-même afin que vous n'ayez pas à accéder à l'emplacement réel du disque.

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

sudo systemctl edit nginx.service

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

sudo systemctl edit --full nginx.service

Après avoir modifié un fichier unité, vous devez recharger le processus systemd lui-même pour récupérer vos modifications :

sudo systemctl daemon-reload

Utilisation des cibles (niveaux d'exécution)

Une autre fonction d'un système init est de faire passer le serveur lui-même entre différents états. Les systèmes d'initialisation traditionnels les appellent généralement des "niveaux d'exécution", permettant au système de n'être que dans un seul niveau d'exécution à la fois.

Dans systemd, des « cibles » sont utilisées à la place. 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 d'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 :

systemctl list-unit-files --type=target

Pour afficher la cible par défaut que systemd essaie d'atteindre au démarrage (qui à son tour démarre tous les fichiers d'unité qui composent l'arborescence des dépendances de cette cible), tapez :

systemctl get-default

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

sudo systemctl set-default multi-user.target

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

systemctl list-dependencies multi-user.target

Vous pouvez modifier l'état du système pour passer d'une cible à l'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 aucun service essentiel :

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 :

sudo systemctl poweroff

Si vous souhaitez plutôt redémarrer le système, cela peut être accompli en tapant :

sudo systemctl reboot

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

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, il n'est pas garanti que cela soit configuré sur tous les systèmes.

Prochaines étapes

À présent, vous devriez connaître les bases de la gestion d'un serveur qui utilise systemd. Cependant, il y a beaucoup plus à apprendre à mesure que vos besoins augmentent. Vous trouverez ci-dessous des liens vers des guides contenant des informations plus détaillées sur certains des composants dont nous avons parlé dans ce guide :

En apprenant à tirer parti des atouts de votre système init, vous pouvez contrôler l'état de vos machines et gérer plus facilement vos services et processus.