« Systemd » : différence entre les versions

De Lea Linux
Aller à la navigation Aller à la recherche
Ligne 69 : Ligne 69 :




A noter que la plupart des distributions ont conservé les vieilles commandes <tt>services</tt> et <tt>chkconfig</tt> de SysVinit pour gérer les services ; elles redirigent vers la commande <tt>systemctl</tt>.  
A noter que la plupart des distributions ont conservé les vieilles commandes <tt>service</tt> et <tt>chkconfig</tt> de SysVinit pour gérer les services ; elles redirigent vers la commande <tt>systemctl</tt>.


=== Créer son propre service ===
=== Créer son propre service ===

Version du 19 avril 2015 à 20:24

systemd

par Jiel

systemd (pour « system daemon » : le démon du système) est un ensemble de programmes destiné à la gestion système, conçu pour le noyau Linux. Il permet le chargement en parallèle des services au démarrage, gère les dépendances entre services et essaie de réduire les appels aux scripts shell. Son but est de remplacer le démon init System V, appelé aussi SysVinit.


Fichiers de configuration

La configuration des services se trouve par défaut dans le répertoire /lib/systemd/system ou /usr/lib/systemd/system.

On utilisera le répertoire /etc/systemd/system pour stocker ses modifications et configurations personnelles, ce qui a le gros avantage que ces fichiers ne seront pas effacés en cas de mise à jour du système.


Les unités

La configuration de Systemd se base sur des unités (units) qui ont un nom et un type. Ainsi, le fichier NetworkManager.service définira l'unité de type service qui s'occupe de la gestion réseau ; de même, systemd-shutdownd.socket définira la socket pour l'arrêt.

Les différent types sont :

  • service : pour un service/démon ;
  • socket : pour une socket (de tous types : UNIX, Internet, fichier etc.) ;
  • mount : pour un système de fichiers (exemple : home.mount), tout en utilisant /etc/fstab ;
  • swap : pour les partitions de swap ;
  • automount : pour un système de fichiers monté à la demande ;
  • device : pour un périphérique ;
  • timer : pour l'activation basée sur une date ;
  • path : pour l'activation basée sur des fichiers ou des répertoires ;
  • target : macro-unité qui permet de grouper plusieurs unités (exemple : multi-user.target pour définir une cible) ;
  • snapshot : unités utilisées pour sauvegarder l’état actuel des services et les restaurer ensuite, par exemple avant de passer en veille.


Gestion des services

Un service (appelé aussi « démon », d'où le d que l'on retrouve parfois à la fin de son nom) est un petit programme qui a pour but d'assurer une tâche particulière : par exemple, NetworkManager gère le réseau, sshd s'occupe des connexions sécurisées SSH, crond s'occupera de l'automatisation des tâches répétitives etc.

Démarrer, arrêter un service

Pour faire une action sur un service, c'est facile, on fera : systemctl <action> <nom_du_service>.service.

Prenons l'exemple du service NetworkManager qui gère le réseau.

Pour démarrer le service réseau :

systemctl start NetworkManager.service

Pour arrêter le service réseau :

systemctl stop NetworkManager.service

Pour activer le service réseau, c'est à dire qu'il soit démarré, par défaut, à partir du prochain démarrage du système :

systemctl enable NetworkManager.service

Pour désactiver le service NetworkManager, , c'est à dire qu'il ne soit pas démarré, par défaut, à partir du prochain démarrage du système :

systemctl disable NetworkManager.service

Pour vérifier si le service NetworkManager est démarré/arrêté et afficher des informations pour le niveau d'exécution en cours :

systemctl status NetworkManager.service

Pour vérifier si le service réseau est activé/désactivé :

systemctl is-enabled NetworkManager.service


A noter que la plupart des distributions ont conservé les vieilles commandes service et chkconfig de SysVinit pour gérer les services ; elles redirigent vers la commande systemctl.

Créer son propre service

On va construire un fichier montest.service, que l'on va mettre dans le répertoire de configuration systemd /etc/systemd/system/ :

[Unit]
Description=Mon service de test
After=tlp-init.service
[Service]
Type=oneshot
RemainAfterExit=no
ExecStart=/usr/local/bin/montest.sh
[Install]
WantedBy=multi-user.target

Pour démarrer le service, on fait, comme vu ci-dessus :

sudo systemctl start montest.service

Et pour l'activer au démarrage :

sudo systemctl enable startup.service


Les niveaux d'exécution

Une cible systemd est un mode de fonctionnement du système (mode graphique, non graphique etc.) qui correspond à un démarrage d'un certain nombre de services.

Les alias commençant par « runlevel » sont là pour les gens qui ont l'habitude de SysVinit.

Les modes de fonctionnements
Cibles systemd Niveaux SysVinit Utilité
poweroff.target - runlevel0.target 0 Arrêt du système.
rescue.target - runlevel1.target 1,s, single Mode utilisateur unique, mode maintenance.
multi-user.target - runlevel3.target 3 Mode multi-utilisateur non graphique.
multi-user.target - runlevel2.target - runlevel4.target 2, 4 Modes multi-utilisateur non graphiques, adaptés aux besoins des distributions.
graphical.target - runlevel5.target 5 Mode multi-utilisateur graphique.
reboot.target - runlevel6.target 6 Redémarrage du système
emergency.target emergency Shell d'urgence.

Pour changer la cible d'exécution temporairement, on fera la commande systemctl isolate <cible>.target. Par exemple, pour passer en mode utilisateur unique (mode non graphique), on fera :

systemctl isolate multi-user.target

ou

systemctl isolate runlevel3.target


Pour changer la cible d'exécution définitivement, afin que cela soit pris en compte au démarrage du système, on créera un lien symbolique default.target dans /etc qui va pointer vers le fichier de cible souhaité. Ainsi, pour passer en mode utilisateur unique (mode non graphique), on fera :

ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target

De même, pour être en mode multi-utilisateur graphique par défaut :

ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target


Les services de systemd

Systemd utilise en interne un certain nombre de services pour la gestion du système, citons en quelques uns :

  • systemd-journald : messages du système et des programmes ;
  • systemd-logind : connexion des utilisateurs ;
  • systemd-vconsole-setup : configuration des consoles virtuelles ;
  • systemd-remount-api-vfs : remontage du système de fichier, en tenant compte des options de fstab ;
  • systemd-sysctl : application des paramètres système de /etc/sysctl.conf ;
  • systemd-stdout-syslog-bridge : utilisation de syslog pour les processus de systemd ;
  • systemd-tmpfiles-setup : création de fichiers et répertoires temporaires ;


Et aussi

La commande systemd-analyze blame, permet de lister le temps de démarrage des différents services. C'est assez pratique pour déterminer le ou les services qui mettent du temps à se lancer.


Outils graphiques

  • systemadm (le paquet s'appelle parfois systemd-ui)

Voir aussi




@ Retour à la rubrique Administration système

Copyright

© 2015 Jiel Beaumadier

Tête de GNU Vous avez l'autorisation de copier, distribuer et/ou modifier ce document suivant les termes de la GNU Free Documentation License, Version 1.2 ou n'importe quelle version ultérieure publiée par la Free Software Foundation; sans section invariante, sans page de garde, sans entête et sans page finale.