« Systemd » : différence entre les versions
Aucun résumé des modifications |
|||
Ligne 44 : | Ligne 44 : | ||
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 [[Reseau-index|réseau]], ''sshd'' s'occupe des connexions sécurisées [[SSH]], ''crond'' s'occupera de l'[[Admin-admin_tools-automate|automatisation]] des tâches répétitives etc. | 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 [[Reseau-index|réseau]], ''sshd'' s'occupe des connexions sécurisées [[SSH]], ''crond'' s'occupera de l'[[Admin-admin_tools-automate|automatisation]] des tâches répétitives etc. | ||
Pour faire une action sur un service, c'est facile, on fera : <tt>systemctl <action> <nom_du_service>.service</tt>. | Pour faire une action sur un service, c'est facile, on fera : <tt>systemctl <action> <nom_du_service>.service</tt>. | ||
Par exemple le service qui gère le réseau se nomme ''NetworkManager'', on fera donc des commandes du type : | |||
<div class="code">systemctl start NetworkManager.service</div> | |||
À 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>. Il n'est pas garanti que ces alias perdurent dans le futur. | |||
=== Démarrer, arrêter un service === | |||
< | Dans les exemples ci-dessous, remplacez <tt>application</tt> par le nom de votre service : par exemple, mariadb, httpd, firewalld, nfsd etc. | ||
Pour | Pour démarrer le service : | ||
<div class="code">systemctl | <div class="code">systemctl start application.service</div> | ||
Pour | Pour arrêter le service : | ||
<div class="code">systemctl | <div class="code">systemctl stop application.service</div> | ||
Pour | Pour redémarrer un service qui est lancé, faites : | ||
<div class="code">systemctl | <div class="code">sudo systemctl restart application.service</div> | ||
Pour | Pour recharger les fichiers de configuration d'un service dans le redémarrer (typiquement, le serveur web Apache) , faites : | ||
<div class="code">systemctl | <div class="code">sudo systemctl reload application.service</div> | ||
Pour | Pour démarrer le service au démarrage du système : | ||
<div class="code">systemctl | <div class="code">systemctl enable application.service</div> | ||
Pour | Pour ne pas démarrer le service au démarrage du système : | ||
<div class="code">systemctl disable | <div class="code">systemctl disable application.service</div> | ||
Pour empêcher l'activation d'un service : | Pour empêcher l'activation d'un service (par exemple on masquera httpd car on veut utiliser nginx et donc éviter que l'admin système démarre httpd par inadvertance) : | ||
<div class="code">systemctl mask | <div class="code">systemctl mask application.service</div> | ||
Pour envoyer un signal d'arrêt (SIGTERM) à tous les processus du service | Pour envoyer un signal d'arrêt (SIGTERM) à tous les processus du service (plus élégant qu'un <tt>killall</tt> qui tue en fonction d'une chaine de caractère): | ||
<div class="code">systemctl kill NetworkManager.service</div> | <div class="code">systemctl kill NetworkManager.service</div> | ||
=== Information sur un service === | |||
Pour voir tous les services disponibles et leur statut : | |||
<div class="code">systemctl list-unit-files --type=service</div> | <div class="code">systemctl list-unit-files --type=service</div> | ||
Pour vérifier si le service est démarré, arrêté, afficher des informations pour le niveau d'exécution en cours : | |||
<div class="code">systemctl status NetworkManager.service</div> | |||
Pour voir si le service est actuellement démarré : | |||
<div class="code">systemctl is-active application.service</div> | |||
Pour vérifier si le service sera démarré au démarrage du système : | |||
<div class="code">systemctl is-enabled application.service</div> | |||
Pou vérifier qu'il y a eu un problème lors du démarrage d'un service : | |||
<div class="code">systemctl is-failed application.service</div> | |||
=== Créer son propre service === | === Créer son propre service === |
Version du 7 décembre 2016 à 23:41
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.
Pour lister toutes les unités présentes sur le système, on fera :
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.
Pour faire une action sur un service, c'est facile, on fera : systemctl <action> <nom_du_service>.service.
Par exemple le service qui gère le réseau se nomme NetworkManager, on fera donc des commandes du type :
À 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. Il n'est pas garanti que ces alias perdurent dans le futur.
Démarrer, arrêter un service
Dans les exemples ci-dessous, remplacez application par le nom de votre service : par exemple, mariadb, httpd, firewalld, nfsd etc.
Pour démarrer le service :
Pour arrêter le service :
Pour redémarrer un service qui est lancé, faites :
Pour recharger les fichiers de configuration d'un service dans le redémarrer (typiquement, le serveur web Apache) , faites :
Pour démarrer le service au démarrage du système :
Pour ne pas démarrer le service au démarrage du système :
Pour empêcher l'activation d'un service (par exemple on masquera httpd car on veut utiliser nginx et donc éviter que l'admin système démarre httpd par inadvertance) :
Pour envoyer un signal d'arrêt (SIGTERM) à tous les processus du service (plus élégant qu'un killall qui tue en fonction d'une chaine de caractère):
Information sur un service
Pour voir tous les services disponibles et leur statut :
Pour vérifier si le service est démarré, arrêté, afficher des informations pour le niveau d'exécution en cours :
Pour voir si le service est actuellement démarré :
Pour vérifier si le service sera démarré au démarrage du système :
Pou vérifier qu'il y a eu un problème lors du démarrage d'un service :
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
La section [Unit] contient de l'information générique sur le service. La section [Service] concerne l'information sur le service en lui-même. La section [Install] s'occupe des circonstances et des déclencheurs dans le cadre desquels le service devrait être démarré.
Pour démarrer le service, on fait, comme vu ci-dessus :
Et pour l'activer au démarrage :
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 savoir dans quel cible on se trouve, on fera :
Pour changer la cible d'exécution définitivement, afin que cela soit pris en compte au démarrage du système, on utilisera set-default. Ainsi, pour passer en mode utilisateur unique (mode non graphique), on fera :
De même, pour être en mode multi-utilisateur graphique par défaut :
Éventuellement, pour les utilisateurs avancés qui voudraient 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 :
ou
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.
systemd-nspawn est le programme de systemd pour la gestion de conteneurs. systemd-analyze list-machines liste tous les systèmes d’exploitation dans un conteneur ainsi que leurs états, si systemd est utilisé dans ces conteneurs.
Outils graphiques
L'outil graphique le plus fiable pour systemd est le module de KDE kcmsystemd. Il permet de visualiser les choses d'une façon un peu plus jolie :
Voir aussi
- Comparatif entre init et systemd : http://images.linoxide.com/systemd-vs-sysVinit-cheatsheet.pdf
- Page officielle
- Gestion des services sans systemd (SysVinit)
Merci à Zbyszek pour ses commentaires.
@ Retour à la rubrique Administration système
Copyright
© 2015, 2016 Jiel Beaumadier
![]() |
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. |