« Systemd » : différence entre les versions

De Lea Linux
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
 
(39 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
= systemd =
= systemd =


par [[Utilisateur:Jiel|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 services et essaie de réduire les appels aux scripts shell. Son but est de remplacer le démon [[Admin-admin_boot-daemons|init System V]], appelé aussi SysVinit.


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 [[Admin-admin_boot-daemons|init System V]], appelé aussi SysVinit.
systemd se manipule grâce à la commande <tt>systemctl</tt>.
 
<br />


== Fichiers de configuration ==
== Fichiers de configuration ==
Ligne 10 : Ligne 12 :


On utilisera le répertoire <tt>/etc/systemd/system</tt> 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.
On utilisera le répertoire <tt>/etc/systemd/system</tt> 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.
<br />


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


Les différent types sont :
La commande suivante vous listera les unités disponibles sur votre système :
<syntaxhighlight lang="bash">systemctl -t help</syntaxhighlight>


* <tt>service</tt> : pour un service/démon ;
Les principaux différents types sont :
* <tt>socket</tt> : pour une socket (de tous types : UNIX, Internet, fichier etc.) ;
 
* <tt>service</tt> : pour un service système ;
* <tt>socket</tt> : pour une socket de communication entre processus (de tous types : UNIX, Internet, fichier etc.) ;
* <tt>busname</tt> : pour les logiciels de communication inter-processus (par exemple dbus) ;
* <tt>target</tt> : macro-unité qui permet de grouper plusieurs unités (exemple : <tt>multi-user.target</tt> pour définir une cible) ;
* <tt>path</tt> : pour l'activation d'un service basée sur la modification de fichiers ou de répertoires (typiquement pour les files d'attente lors de l'impression) ;
* <tt>mount</tt> : pour un système de fichiers (exemple : <tt>home.mount</tt>), tout en utilisant /etc/fstab ;
* <tt>mount</tt> : pour un système de fichiers (exemple : <tt>home.mount</tt>), tout en utilisant /etc/fstab ;
* <tt>automount</tt> : pour un système de fichiers monté à la demande ;
* <tt>swap</tt> : pour les partitions de swap ;
* <tt>swap</tt> : pour les partitions de swap ;
* <tt>automount</tt> : pour un système de fichiers monté à la demande ;
* <tt>device</tt> : pour un périphérique ;
* <tt>device</tt> : pour un périphérique ;
* <tt>timer</tt> : pour l'activation basée sur une date ;
* <tt>timer</tt> : pour l'activation basée sur une date ;
* <tt>path</tt> : pour l'activation basée sur des fichiers ou des répertoires ;
* <tt>slice</tt> : sert pour la gestion des cgroups, une fonctionnalité du noyau Linux pour limiter, compter et isoler l'utilisation des ressources ;
* <tt>target</tt> : macro-unité qui permet de grouper plusieurs unités (exemple : <tt>multi-user.target</tt> pour définir une cible) ;
* <tt>scope</tt> : utilisé par systemd lui-même pour gérer des groupes de processus, typiquement, par session utilisateurs ;
* <tt>snapshot</tt> : unités utilisées pour sauvegarder l’état actuel des services et les restaurer ensuite, par exemple avant de passer en veille.
* <tt>snapshot</tt> : 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 :
<syntaxhighlight lang="bash">systemctl list-units</syntaxhighlight>
<br />


== Gestion des services ==
== 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 [[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 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. Un service utilise un ou plusieurs démons : 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>.
 
Par exemple pour le service ''NetworkManager'', on fera des commandes du type :
<syntaxhighlight lang="bash">systemctl start NetworkManager.service</syntaxhighlight>
 
À 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 ===
=== Démarrer, arrêter un service ===


Pour faire une action sur un service, c'est facile, on fera : <tt>systemctl <action> <nom_du_service>.service</tt>.
Dans les exemples ci-dessous, remplacez <tt>application</tt> par le nom de votre service : par exemple, mariadb, httpd, firewalld, nfsd etc.
 
Pour démarrer le service :
 
<syntaxhighlight lang="bash">systemctl start application.service</syntaxhighlight>
 
Pour arrêter le service :
 
<syntaxhighlight lang="bash">systemctl stop application.service</syntaxhighlight>
 
Pour redémarrer un service qui est lancé, faites :
 
<syntaxhighlight lang="bash">sudo systemctl restart application.service</syntaxhighlight>
 
Pour recharger les fichiers de configuration d'un service dans le redémarrer (typiquement, le serveur web Apache) , faites :
 
<syntaxhighlight lang="bash">sudo systemctl reload application.service</syntaxhighlight>
 
Pour que le service soit lancé au démarrage du système :
 
<syntaxhighlight lang="bash">systemctl enable application.service</syntaxhighlight>
 
Pour que le service ne soit pas lancé au démarrage du système :
 
<syntaxhighlight lang="bash">systemctl disable application.service</syntaxhighlight>
 
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) :
 
<syntaxhighlight lang="bash">systemctl mask application.service</syntaxhighlight>
 
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):
 
<syntaxhighlight lang="bash">systemctl kill application.service</syntaxhighlight>


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


Pour démarrer le service réseau :
Pour voir tous les services disponibles et leur statut, y compris les services de statut inactif :


<div class="code">systemctl start NetworkManager.service</div>
<syntaxhighlight lang="bash">systemctl list-unit-files --type=service --all</syntaxhighlight>


Pour arrêter le service réseau :
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 stop NetworkManager.service</div>
<syntaxhighlight lang="bash">systemctl status application.service</syntaxhighlight>


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 :
Pour voir si le service est actuellement démarré :


<div class="code">systemctl enable NetworkManager.service</div>
<syntaxhighlight lang="bash">systemctl is-active application.service</syntaxhighlight>


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 :
Pour vérifier si le service sera démarré au démarrage du système :


<div class="code">systemctl disable NetworkManager.service</div>
<syntaxhighlight lang="bash">systemctl is-enabled application.service</syntaxhighlight>


Pour vérifier si le service NetworkManager est démarré/arrêté et afficher des informations pour le niveau d'exécution en cours :
Pou vérifier qu'il y a eu un problème lors du démarrage d'un service :


<div class="code">systemctl status NetworkManager.service</div>
<syntaxhighlight lang="bash">systemctl is-failed application.service</syntaxhighlight>


Pour vérifier si le service réseau est activé/désactivé :
Pour voir tous les services qui ont un problème :


<div class="code">systemctl is-enabled NetworkManager.service</div>
<syntaxhighlight lang="bash">systemctl --failed --type=service</syntaxhighlight>


Évidemment les commandes Unix classiques vous permettent aussi de comprendre ce qui se passe, vous pouvez par exemple lister les processus avec :


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>.
<syntaxhighlight lang="bash">ps aux</syntaxhighlight>


=== Créer son propre service ===
=== Créer son propre service ===
Ligne 69 : Ligne 124 :
On va construire un fichier <tt>montest.service</tt>, que l'on va mettre dans le répertoire de configuration systemd <tt>/etc/systemd/system/</tt> :
On va construire un fichier <tt>montest.service</tt>, que l'on va mettre dans le répertoire de configuration systemd <tt>/etc/systemd/system/</tt> :


<div class="code">
<syntaxhighlight lang="bash">
  [Unit]
  [Unit]
  Description=Mon service de test
  Description=Mon service de test
Ligne 81 : Ligne 136 :
  [Install]
  [Install]
  WantedBy=multi-user.target
  WantedBy=multi-user.target
</div>
</syntaxhighlight>
 
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 :
Pour démarrer le service, on fait, comme vu ci-dessus :


<div class="code">sudo systemctl start montest.service</div>
<syntaxhighlight lang="bash">sudo systemctl start montest.service</syntaxhighlight>


Et pour l'activer au démarrage :
Et pour l'activer au démarrage :


<div class="code">sudo systemctl enable startup.service</div>
<syntaxhighlight lang="bash">sudo systemctl enable startup.service</syntaxhighlight>


=== Les services propres à systemd ===


=== Les niveaux d'exécution ===
Systemd utilise en interne un certain nombre de services pour la gestion du système, citons en quelques uns :
 
* <tt>systemd-journald</tt> : messages du système et des programmes ;
* <tt>systemd-logind</tt> : connexion des utilisateurs ;
* <tt>systemd-vconsole-setup</tt> : configuration des consoles virtuelles ;
* <tt>systemd-remount-api-vfs</tt> : remontage du système de fichier, en tenant compte des options de [[fstab]] ;
* <tt>systemd-sysctl</tt> : application des paramètres système de /etc/sysctl.conf ;
* <tt>systemd-stdout-syslog-bridge</tt> : utilisation de syslog pour les processus de systemd ;
* <tt>systemd-tmpfiles-setup</tt> : création de fichiers et répertoires temporaires ;
 
<br />
 
=== Et aussi ===
 
La commande <tt>systemd-analyze blame</tt>, 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.
 
<tt>systemd-nspawn</tt> est le programme de systemd pour la gestion de conteneurs. <tt>systemd-analyze list-machines</tt>  liste tous les systèmes d’exploitation dans un conteneur ainsi que leurs états, si systemd est utilisé dans ces conteneurs.
 
<br />
 
== 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.
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.


<table border="1">
<table border="1">
Ligne 104 : Ligne 184 :
  <th> Cibles systemd
  <th> Cibles systemd
  </th>
  </th>
  <th> Niveaux d'exécution SysVinit
  <th> Niveaux SysVinit
  </th>
  </th>
  <th> Utilité
  <th> Utilité
Ligne 110 : Ligne 190 :
</tr>
</tr>
<tr>
<tr>
  <td> runlevel0.target, poweroff.target
  <td> poweroff.target - runlevel0.target
  </td>
  </td>
  <td> 0
  <td> 0
Ligne 117 : Ligne 197 :
  </td></tr>
  </td></tr>
<tr>
<tr>
  <td> runlevel1.target, rescue.target
  <td> rescue.target - runlevel1.target
  </td>
  </td>
  <td> 1,s, single
  <td> 1,s, single
Ligne 125 : Ligne 205 :
</tr>
</tr>
<tr>
<tr>
  <td> runlevel3.target, multi-user.target
  <td> multi-user.target - runlevel3.target
  </td>
  </td>
  <td> 3
  <td> 3
Ligne 133 : Ligne 213 :
</tr>
</tr>
<tr>
<tr>
  <td> runlevel2.target, runlevel4.target, multi-user.target
  <td> multi-user.target - runlevel2.target - runlevel4.target
  </td>
  </td>
  <td> 2, 4
  <td> 2, 4
  </td>
  </td>
  <td> Mode multi-utilisateur non graphiques, adaptés aux besoins des distributions.
  <td> Modes multi-utilisateur non graphiques, adaptés aux besoins des distributions.
  </td>
  </td>
</tr>
</tr>
<tr>
<tr>
  <td> runlevel5.target, graphical.target
  <td> graphical.target - runlevel5.target
  </td>
  </td>
  <td> 5
  <td> 5
Ligne 149 : Ligne 229 :
</tr>
</tr>
<tr>
<tr>
  <td> runlevel6.target, reboot.target
  <td> reboot.target - runlevel6.target
  </td>
  </td>
  <td> 6
  <td> 6
Ligne 161 : Ligne 241 :
  <td> emergency
  <td> emergency
  </td>
  </td>
  <td> Shell d'urgence.
  <td> Shell d'urgence, avec système de fichiers monté en lecture seule. Plus radical que rescue.
  </td>
  </td>
</tr>
</tr>
</table>
</table>


Pour changer la cible d'exécution temporairement, on fera la commande <tt>systemctl isolate <cible>.target</tt>. Par exemple, pour passer en mode utilisateur unique (mode non graphique), on fera :  
Pour savoir dans quel cible on se trouve, on fera :
 
<syntaxhighlight lang="bash">systemctl get-default </syntaxhighlight>
 
Pour changer la cible d'exécution définitivement, afin que cela soit pris en compte au démarrage du système, on utilisera <tt>set-default</tt>. Ainsi, pour passer en mode utilisateur unique (mode non graphique), on fera :
 
<syntaxhighlight lang="bash">systemctl set-default multi-user.target </syntaxhighlight>
 
De même, pour être en mode multi-utilisateur graphique par défaut :


<div class="code">systemctl isolate multi-user.target</div>
<syntaxhighlight lang="bash">systemctl set-default graphical.target </syntaxhighlight>


ou
Éventuellement, pour les utilisateurs avancés qui voudraient changer la cible d'exécution temporairement, on fera la commande <tt>systemctl isolate <cible>.target</tt>. Par exemple, pour passer en mode utilisateur unique (mode non graphique), on fera :


<div class="code">systemctl isolate runlevel3.target</div>
<syntaxhighlight lang="bash">systemctl isolate multi-user.target</syntaxhighlight>


ou


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 <tt>default.target</tt> dans <tt>/etc</tt> qui va pointer vers le fichier de cible souhaité. Ainsi, pour passer en mode utilisateur unique (mode non graphique), on fera :
<syntaxhighlight lang="bash">systemctl isolate runlevel3.target</syntaxhighlight>


<div class="code">ln -sf /lib/systemd/system/multi-user.target /etc/systemd/system/default.target</div>


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


<div class="code">ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target</div>
== Outils graphiques ==


== Les services de systemd ==
L'outil graphique le plus fiable pour systemd est le module de [[KDE]] <tt>kcmsystemd</tt>. Il permet de visualiser les choses d'une façon un peu plus jolie :


Systemd utilise en interne un certain nombre de services pour la gestion du système, il s'agit notamment de :
[[Image:kcmsystemd2015.jpeg]]


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


== Et aussi ==
Il existe un autre outil graphique pour l'administration de systemd, il se nomme systemadm (le paquet pour l'installer s'appelle parfois <tt>systemd-ui</tt>). Attention, il reste encore très basique et instable (il plante facilement) :


La commande <tt>systemd-analyze blame</tt>, 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 des
[[Image:systemadm2015.jpeg]]


== Outils graphiques ==
-->


* systemadm (le paquet s'appelle parfois systemd-ui)
<br />


== Voir aussi ==
== Voir aussi ==
Ligne 208 : Ligne 290 :
* [http://www.freedesktop.org/wiki/Software/systemd/ Page officielle]
* [http://www.freedesktop.org/wiki/Software/systemd/ Page officielle]
* [[Admin-admin_boot-daemons|Gestion des services sans systemd (SysVinit)]]
* [[Admin-admin_boot-daemons|Gestion des services sans systemd (SysVinit)]]
Merci à Zbyszek pour ses commentaires.




<br/>
<br/>
<br/>
<br/>
'''<b>[[Admin-index|@ Retour à la rubrique Administration système]]</b>'''
'''<b>[[Administration système|@ Retour à la rubrique Administration système]]</b>'''
<br/>
<br/>


{{Copy|2015|[[Utilisateur:Jiel|Jiel Beaumadier]]|FDL}}
{{Copy|2015, 2016, 2017|[[Utilisateur:Jiel|Jiel Beaumadier]]|FDL}}
 
[[Catégorie:Administration système]]

Dernière version du 21 août 2024 à 18:03

systemd

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 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.

systemd se manipule grâce à la commande systemctl.


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.

La commande suivante vous listera les unités disponibles sur votre système :

systemctl -t help

Les principaux différents types sont :

  • service : pour un service système ;
  • socket : pour une socket de communication entre processus (de tous types : UNIX, Internet, fichier etc.) ;
  • busname : pour les logiciels de communication inter-processus (par exemple dbus) ;
  • target : macro-unité qui permet de grouper plusieurs unités (exemple : multi-user.target pour définir une cible) ;
  • path : pour l'activation d'un service basée sur la modification de fichiers ou de répertoires (typiquement pour les files d'attente lors de l'impression) ;
  • mount : pour un système de fichiers (exemple : home.mount), tout en utilisant /etc/fstab ;
  • automount : pour un système de fichiers monté à la demande ;
  • swap : pour les partitions de swap ;
  • device : pour un périphérique ;
  • timer : pour l'activation basée sur une date ;
  • slice : sert pour la gestion des cgroups, une fonctionnalité du noyau Linux pour limiter, compter et isoler l'utilisation des ressources ;
  • scope : utilisé par systemd lui-même pour gérer des groupes de processus, typiquement, par session utilisateurs ;
  • 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 :

systemctl list-units


Gestion des services

Un 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. Un service utilise un ou plusieurs démons : 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 pour le service NetworkManager, on fera des commandes du type :

systemctl start NetworkManager.service

À 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 :

systemctl start application.service

Pour arrêter le service :

systemctl stop application.service

Pour redémarrer un service qui est lancé, faites :

sudo systemctl restart application.service

Pour recharger les fichiers de configuration d'un service dans le redémarrer (typiquement, le serveur web Apache) , faites :

sudo systemctl reload application.service

Pour que le service soit lancé au démarrage du système :

systemctl enable application.service

Pour que le service ne soit pas lancé au démarrage du système :

systemctl disable application.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) :

systemctl mask application.service

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):

systemctl kill application.service

Information sur un service

Pour voir tous les services disponibles et leur statut, y compris les services de statut inactif :

systemctl list-unit-files --type=service --all

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

systemctl status application.service

Pour voir si le service est actuellement démarré :

systemctl is-active application.service

Pour vérifier si le service sera démarré au démarrage du système :

systemctl is-enabled application.service

Pou vérifier qu'il y a eu un problème lors du démarrage d'un service :

systemctl is-failed application.service

Pour voir tous les services qui ont un problème :

systemctl --failed --type=service

Évidemment les commandes Unix classiques vous permettent aussi de comprendre ce qui se passe, vous pouvez par exemple lister les processus avec :

ps aux

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 :

sudo systemctl start montest.service

Et pour l'activer au démarrage :

sudo systemctl enable startup.service

Les services propres à 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.


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, avec système de fichiers monté en lecture seule. Plus radical que rescue.

Pour savoir dans quel cible on se trouve, on fera :

systemctl get-default

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 :

systemctl set-default multi-user.target

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

systemctl set-default graphical.target

É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 :

systemctl isolate multi-user.target

ou

systemctl isolate runlevel3.target



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

Merci à Zbyszek pour ses commentaires.




@ Retour à la rubrique Administration système

Copyright

© 2015, 2016, 2017 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.