Table des matières de l'article :
Systemd est un mécanisme de gestion et de service, communément appelé « démon système ». Cela est devenu critique dans RHEL7 et versions ultérieures, assumant la responsabilité d'initialiser et d'activer les ressources système et les démons du serveur au démarrage et pendant l'exécution du système. En termes simples, systemd démarre et gère toutes sortes de processus et de services sous Linux. Techniquement, il s'agit d'un programme d'initialisation qui amène le système à un état défini en activant tous les services et processus activés dans cet état, en utilisant des fichiers de configuration pour savoir quels services et processus sont activés dans chaque état.
Evolution des systèmes d'initialisation jusqu'à Systemd
systemd est le successeur des programmes d'initialisation SysVinit et Upstart. SysVinit, créé dans les années 80 pour les systèmes « UNIX System V », a longtemps été le standard jusqu'à RHEL5. Ce programme a défini six états du système, appelés niveaux d'exécution, et a mappé tous les processus et services à ces niveaux. Cependant, SysVinit était destiné à un environnement statique et ne gérait pas bien les périphériques enfichables à chaud, tels que les clés USB.
Upstart a été développé en remplacement de SysVinit pour fonctionner dans un environnement plus flexible. Il offrait des avantages tels que la gestion des services basée sur les événements, le démarrage asynchrone des services et le redémarrage automatique des services en panne. Contrairement à SysVinit, Upstart n'utilisait pas de niveaux d'exécution, mais des événements système pour démarrer et arrêter les services.
sysvinit
L'histoire de SysVinit commence dans les années 80, lorsqu'il a été introduit pour les systèmes « UNIX System V ». À cette époque, cela représentait une avancée majeure dans la gestion des systèmes d’exploitation UNIX. SysVinit est resté la norme pour plusieurs systèmes d'exploitation, y compris ceux basés sur Linux tels que Red Hat Enterprise Linux (RHEL) jusqu'à la version 5, publiée en 2007. Son rôle était d'organiser le processus de démarrage du système en six états système ou niveaux d'exécution, chacun représentant un état différent de fonctionnement du système, depuis un démarrage complet jusqu'à un état de récupération ou de maintenance. Cependant, SysVinit présentait des limites importantes : il était conçu pour un environnement système plus statique et ne gérait pas efficacement les nouveaux développements tels que les périphériques hot-plug.
Parvenu
En réponse aux limitations de SysVinit, Upstart a été développé, introduit pour la première fois dans Ubuntu en 2006. Upstart était une tentative de moderniser le processus de démarrage, en introduisant des concepts tels que la gestion des services basée sur les événements et le démarrage de services asynchrone. Cela signifiait que les services pouvaient être démarrés ou arrêtés en réponse à des événements spécifiques, plutôt que dans un ordre défini comme dans SysVinit. La capacité d'Upstart à redémarrer automatiquement les services en panne et à mieux gérer les appareils enfichables à chaud constitue une nette amélioration par rapport à son prédécesseur. Cependant, Upstart avait aussi ses limites, notamment dans la gestion de dépendances complexes entre services.
Systemd
Enfin, systemd est devenu le successeur d'Upstart et SysVinit. Développé par Lennart Poettering et Kay Sievers de Red Hat, systemd a été publié pour la première fois en 2010 et adopté par Fedora en 2011. Cela représente un changement radical dans la manière dont Linux gère le processus de démarrage et la supervision des services. Systemd introduit une approche plus intégrée et dynamique, gérant non seulement le démarrage des services mais également les sessions utilisateur, les points de montage, les sockets et autres ressources système. Avec des fonctionnalités telles que le démarrage parallèle des services, la résolution des dépendances et la gestion avancée via des groupes de contrôle, systemd a redéfini l'efficacité et la flexibilité dans la gestion des systèmes Linux modernes.
Ces transitions, de SysVinit vers Upstart puis vers systemd, reflètent l'évolution continue des systèmes d'exploitation Linux et la recherche de solutions de plus en plus performantes et adaptées aux besoins d'un environnement en évolution rapide.
Caractéristiques et avantages de Systemd
Systemd, le programme d'initialisation moderne, est utilisé par la plupart des développeurs Linux, notamment RedHat (depuis la version 7) et Ubuntu (depuis la version 15.04). Ce système est plus complexe et offre de nombreuses fonctionnalités et outils pour gérer les services, les appareils, les sockets, les points de montage, les zones d'échange, les types de lecteurs, les cibles et bien plus encore.
Les avantages de systemd incluent plusieurs fonctionnalités importantes :
- Démarrage des services en mode parallèle: Systemd est capable de démarrer des services simultanément au lieu de le faire séquentiellement. Cette approche parallèle réduit considérablement le temps de démarrage du système, améliorant ainsi les performances globales. Plusieurs services peuvent être démarrés en même temps, à condition qu'ils n'aient aucune dépendance les uns sur les autres, optimisant ainsi l'utilisation des ressources système.
- Résolution automatique des dépendances: Systemd gère intelligemment les dépendances entre les différents services. Il identifie et résout automatiquement ces dépendances, garantissant que les services sont démarrés dans le bon ordre. Cela élimine le besoin de configurations manuelles complexes, rendant le processus de démarrage plus efficace et moins sujet aux erreurs.
- Possibilité de redémarrer les processus: Systemd a la capacité de surveiller et de redémarrer automatiquement les services qui s'arrêtent de manière inattendue. Cela garantit une plus grande stabilité du système, car les services critiques peuvent être rapidement restaurés sans intervention humaine, minimisant ainsi les temps d'arrêt.
- Suivi des processus et association via des groupes de contrôle Linux (cgroups): Systemd utilise des groupes de contrôle pour organiser et gérer efficacement les processus. Cela permet d'allouer des ressources telles que le processeur et la mémoire à des groupes spécifiques de processus, améliorant ainsi la gestion des ressources et isolant les processus les uns des autres, ce qui augmente la sécurité et la stabilité du système.
- Prise en charge matérielle moderne: Systemd offre une large prise en charge du matériel moderne, y compris les périphériques enfichables à chaud tels que les clés USB et les disques externes. Cela signifie que systemd peut gérer dynamiquement ces appareils lorsqu'ils sont connectés ou déconnectés, améliorant ainsi la convivialité et la flexibilité du système.
- Démarrage du démon sur demande: Avec systemd, les démons peuvent être démarrés à la demande, sans qu'il soit nécessaire de redémarrer le service déjà en cours d'exécution. Ceci est particulièrement utile pour les services qui n'ont pas besoin de fonctionner en continu, mais uniquement lorsque cela est nécessaire, réduisant ainsi l'utilisation des ressources système.
- Création d'instantanés de l'état du système en cours d'exécution: Systemd vous permet de créer des instantanés de l'état actuel du système. Ces instantanés peuvent être utilisés pour restaurer l'état du système à un point antérieur, une fonctionnalité utile en cas d'erreurs ou de dysfonctionnements.
- Enregistrement des événements: Enfin, systemd fournit un mécanisme de journalisation avancé, qui vous permet de suivre et d'analyser tous les événements liés aux services et processus système. Ceci est essentiel pour le débogage et pour assurer la sécurité et le fonctionnement optimal de votre système.
Ces fonctionnalités font de systemd un outil polyvalent et puissant pour gérer les systèmes d'exploitation Linux modernes, améliorant considérablement la gestion, la sécurité et les performances des services et processus système.
Le concept d'unité dans Systemd
Dans systemd, le concept « d’Unité » représente l’un des piliers fondamentaux sur lesquels repose cette technologie. Une unité dans systemd est un objet qui représente un service, un processus, une ressource ou un point de montage au sein du système. Chaque unité est décrite par un fichier de configuration, qui spécifie comment systemd doit gérer le service ou la ressource correspondant. Ces fichiers de configuration sont clairs, structurés et facilement lisibles et se trouvent généralement dans /etc/systemd/system
ou /lib/systemd/system
.
Les unités de systemd sont classées en différents types, chacun ayant un objectif spécifique. Les types les plus courants comprennent :
- Unités de service: Ils gèrent les services système, tels que les serveurs Web ou les bases de données. Ils sont identifiés par des fichiers portant l'extension
.service
. - Unités de prise: Utilisés pour gérer les sockets réseau et IPC, ils permettent la communication inter-processus. Ils sont représentés par des fichiers
.socket
. - Unités de périphérique: Représentent les périphériques matériels et sont créés dynamiquement en réponse aux périphériques matériels détectés par le système. Ils sont identifiés par des fichiers
.device
. - Unités de montage: Gérer les points de montage dans le système de fichiers, correspondant aux fichiers
.mount
. - Unités cibles: Ils fournissent un mécanisme de regroupement de différentes unités, facilitant la gestion d'ensembles complexes de dépendances et le démarrage coordonné des services. Les fichiers
.target
représentent ces groupes.
Chaque unité peut avoir une série de directives qui définissent comment elle doit se comporter. Ces directives peuvent inclure, par exemple, l'ordre dans lequel les services doivent être démarrés, les dépendances entre différents services ou les actions à entreprendre en cas de panne d'un service. Le système systemd analyse ces fichiers de configuration au démarrage du système ou lorsqu'un administrateur demande de démarrer, d'arrêter ou de redémarrer une unité.
L'introduction des unités dans systemd a considérablement simplifié la gestion des services et des ressources sous Linux, rendant le processus plus évolutif, gérable et compréhensible. Cette approche modulaire et unitaire permet aux administrateurs d'avoir un contrôle plus granulaire sur le comportement des services et les relations entre eux, conduisant à une gestion du système plus efficace et plus flexible.
Systemd comme chien de garde au lieu de superviseur
Systemd offre une fonctionnalité de surveillance intégrée, qui permet aux administrateurs système de l'utiliser comme alternative aux outils externes tels que Supervisord pour surveiller et gérer les services. Le concept de chien de garde dans systemd est basé sur la capacité de surveiller activement les services et les processus, en les redémarrant automatiquement en cas de panne ou d'arrêt inattendu. Cela se traduit par une plus grande résilience et stabilité du système.
La principale caractéristique de systemd en tant que chien de garde est son intégration native avec l'écosystème Linux. Contrairement à Supervisord, qui nécessite une configuration et une gestion séparées, systemd fait déjà partie intégrante de la plupart des distributions Linux modernes, offrant une solution unifiée pour démarrer, superviser et gérer les services.
Pour utiliser systemd comme chien de garde, les administrateurs peuvent profiter de plusieurs directives dans les fichiers de configuration des unités de service. Ceux-ci incluent des options telles que Restart=
, qui définit les conditions et la fréquence à laquelle un service doit être redémarré en cas de panne, et WatchdogSec=
, qui définit une minuterie pour le chien de garde. Lorsqu'un service ne signale pas d'activité dans le délai spécifié par WatchdogSec=
, systemd intervient automatiquement pour tenter de restaurer le service.
Cette fonctionnalité fait de systemd non seulement un initialiseur de système, mais également un outil puissant pour maintenir la stabilité et la fiabilité des services critiques. Avec systemd, les administrateurs peuvent mettre en place des systèmes d'auto-réparation, où les services sont constamment surveillés et maintenus en état de fonctionnement sans nécessiter d'intervention manuelle fréquente. En ce sens, systemd agit comme une protection intégrée, augmentant la disponibilité du système et réduisant les temps d'arrêt potentiels causés par des pannes ou des erreurs de service.
Le rejet initial de Systemd par la communauté Linux
L’introduction de systemd dans le monde Linux n’a pas été unanimement accueillie avec enthousiasme. Au lieu de cela, il s'est heurté à une résistance significative de la part d'une partie de la communauté Linux. Ce rejet était en grande partie dû à des préoccupations concernant la complexité et la centralisation des fonctionnalités introduites par systemd, rompant avec l'approche Unix traditionnelle consistant à « faire une chose et la faire bien ». Certains utilisateurs et développeurs considéraient systemd comme une usurpation de l'approche Linux traditionnelle, avec son système intégré gérant de nombreux aspects du système d'exploitation, qui étaient auparavant gérés par une variété d'outils modulaires plus petits. De plus, l'adoption rapide de systemd par de nombreuses distributions Linux majeures a suscité des inquiétudes quant à la diminution de la diversité et du choix dans le paysage Linux.
La montée de Devuan comme alternative pour les vétérans.
En réponse à la dissidence croissante contre systemd, une nouvelle distribution Linux appelée Devuan est née (dont nous avons parlé dans cet article). Devuan Linux : alternative centrée sur la liberté au système d'exploitation Debian). Lancé en 2014, Devuan est apparu comme un fork de Debian, l'une des distributions Linux les plus populaires, spécifiquement pour offrir une alternative sans système. L'objectif principal de Devuan était de conserver l'héritage de l'initialisation traditionnelle, en offrant aux utilisateurs la liberté de choix et une expérience moins complexe que systemd. Cette distribution a particulièrement attiré les utilisateurs Linux traditionnels, ceux qui préfèrent l'approche modulaire et décentralisée de l'administration système. Devuan s'est révélé particulièrement attrayant pour les débutants sous Linux, qui recherchent un système d'exploitation simple et moins complexe, et pour ceux qui souhaitent avoir davantage de contrôle manuel sur divers aspects de leur système d'exploitation.
Guide de commandes de SysVinit à Systemd
La transition de SysVinit vers systemd a conduit à des changements importants dans la gestion des services et des processus dans les systèmes Linux. Pour les administrateurs système et les utilisateurs habitués aux commandes SysVinit, l'adaptation à systemd peut sembler un défi au début. Ce guide est conçu pour faciliter cette transition en fournissant une comparaison directe entre les commandes SysVinit traditionnelles et leurs équivalents systemd. Cette comparaison aidera les utilisateurs à mieux comprendre comment les commandes familières ont été transformées et comment elles peuvent être utilisées dans le nouveau système. Vous trouverez ci-dessous un tableau qui illustre la syntaxe des commandes SysVinit et de leurs homologues dans systemd, facilitant ainsi la mise à jour de vos compétences et la compréhension du nouveau paradigme de gestion des systèmes.
Commandes liées aux services
commentaires | sysvinit | Systemd |
---|---|---|
Démarrer un service | service dummy start | systemctl start dummy.service |
Arrêter un service | service dummy stop | systemctl stop dummy.service |
Redémarrer un service | service dummy restart | systemctl restart dummy.service |
Recharger un service | service dummy reload | systemctl reload dummy.service |
Vérifier l'état d'un service | service dummy status | systemctl status dummy.service |
Démarrez un service au démarrage s'il est déjà en cours d'exécution | service dummy condrestart | systemctl try-restart dummy.service |
Activer un service au démarrage | chkconfig dummy on | systemctl enable dummy.service |
Désactiver un service au démarrage | chkconfig dummy off | systemctl disable dummy.service |
Vérifier si un service est activé au démarrage | chkconfig dummy | systemctl is-enabled dummy.service |
Créez un nouveau fichier de service ou modifiez la configuration | chkconfig dummy --add | systemctl daemon-reload |
Niveaux d'exécution – Niveaux d'exécution
commentaires | sysvinit | Systemd |
---|---|---|
Arrêt du système | 0 | runlevel0.target, poweroff.target |
Mode utilisateur unique | 1, s, single | runlevel1.target, rescue.target |
Multi-utilisateur | 2 | runlevel2.target, multi-user.target |
Multi-utilisateur avec réseau | 3 | runlevel3.target, multi-user.target |
Expérimental | 4 | runlevel4.target, multi-user.target |
Multi-utilisateur, avec réseau, mode graphique | 5 | runlevel5.target, graphical.target |
Redémarrer | 6 | runlevel6.target, reboot.target |
Coque d'urgence | emergency | emergency.target |
Passer au niveau d'exécution/cible multi-utilisateurs | telinit 3 | systemctl isolate multi-user.target (OU systemctl isolate runlevel3.target ) |
Définir une cible multi-utilisateur au prochain démarrage | sed -i 's/id:3:initdefault:/id:5:initdefault:/' /etc/inittab | ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target |
Vérifier le niveau d'exécution actuel | runlevel | systemctl get-default |
Changer le niveau d'exécution par défaut | sed -i 's/id:3:initdefault:/id:5:initdefault:/' /etc/inittab | systemctl set-default multi-user.target |
Diverses commandes
commentaires | sysvinit | Systemd |
---|---|---|
Arrêt du système | halt | systemctl halt |
Arrêt du système | poweroff | systemctl poweroff |
Riavvio du système | reboot | systemctl reboot |
Suspension du système | pm-suspend | systemctl suspend |
Hibernation | pm-hibernate | systemctl hibernate |
Suivez le fichier journal du système | tail -f /var/log/messages o tail -f /var/log/syslog | journalctl -f |
Nouvelles commandes Systemd
commentaires | Systemd |
---|---|
Exécutez une commande systemd sur un hôte distant | systemctl -H user@host |
Vérifiez l'heure de démarrage | systemd-analyze o systemd-analyze time |
Tuez tous les processus liés à un service | systemctl kill dummy |
Obtenez des journaux des événements d'aujourd'hui | journalctl --since=today |
Nom d'hôte et autres informations sur l'hôte | hostnamectl |
Date et heure du système avec fuseau horaire et autres informations | timedatectl |
Ce tableau n'est pas exhaustif, mais couvre les commandes les plus couramment utilisées, fournissant une référence pratique pour les utilisateurs passant de SysVinit à systemd. Avec ce guide, l’objectif est de rendre le processus de transition aussi fluide et intuitif que possible.
Conclusion et conseils
Dans le monde vaste et en constante évolution des systèmes d'exploitation Linux, Systemd n'est pas seulement une tendance, mais une transformation fondamentale qui a redéfini la gestion des services et des processus sous Linux. Pour les administrateurs système, l’apprentissage et la maîtrise de Systemd ne sont plus des options, mais des incontournables.
Le passage de l'ancien sysvinit au Systemd, plus moderne et polyvalent, n'est pas seulement une étape technologique, mais aussi un saut qualitatif dans les compétences requises des professionnels de l'informatique. La plupart des distributions Linux modernes, de Debian à Fedora, d'Ubuntu à CentOS, s'appuient désormais sur Systemd pour la gestion des services. Cela fait passer l’aiguille d’un système d’initialisation traditionnel, que beaucoup connaissent et utilisent depuis des années, à un écosystème plus complexe et plus puissant, où les compétences Systemd deviennent essentielles.
L'apprentissage de Systemd n'est pas seulement un investissement pour maintenir votre pertinence professionnelle ; c'est également l'occasion d'explorer de nouvelles méthodes d'optimisation des performances, de gestion des ressources et d'automatisation dans les environnements Linux.