Systemd : Configuration et fonctionnement des services Linux (daemon)

Systemd est le gestionnaire de service qui succède à SysV init.
C'est le système qui gère les services, daemon et initialise l'OS Linux.

Dans les Linux, les daemon permettent de faire fonctionner des programmes dès le démarrage et en tâche de fond.
On peut aussi les appeler services.
Ils peuvent s'exécuter durant la phase de boot de Linux

La plupart des logiciels fonctionnent en mode serveur ont besoin d'installer un Daemon.
Voici comment configurer les daemon et services sur la plupart des distributions à base de Debian.

Systemd : Configuration et fonctionnement des services Linux (daemon)

Qu'est-ce que les services et daemon sur Linux

Le système d'exploitation a besoin de faire tourner des programmes en permanence liés au fonctionnement de ce dernier.
De même les serveurs Linux ont eux aussi la nécessité de faire tourner des applications dès le démarrage comme par exemple, un serveur WEB, un serveur SSH, etc.

Pour se faire Linux embarque les daemons et de services.
Il s'agit d'un système standard qui permet via des scripts d'exécuter une application en mode service.

Les différents distributions Linux n'utilisent pas le même système de fonctionnent pour les daemon.
Par exemple, les distributions à base de Fedora utilisent SystemD alors qu'Ubuntu utilise Upstart.
Debian s'appuie quant à lui sur SysVinit, ce dernier étant un dérivé de init utilisé par Gnome et BSD.

Globalement le fonctionnement général est assez similaire selon les distributions mais avec quelques subtilités.
Ce sont surtout les commandes de configuration des daemon qui ne portent pas le même nom.
Les commandes pour configurer les services diffèrent aussi.

Qu'est-ce que systemd dans Linux

Systemd est un ensemble de logiciels et systèmes nécessaires aux fonctionnement Linux.
Notamment ils exposent les daemons : systemd, journald, networkd, logind.
Pour chaque système, un ensemble d'utilitaires et de commandes sont disponibles pour l'utilisateur comme systemctl, journalctl, loginctl, etc.

Les composants de systemd

Ainsi Systemd gère l'ensemble des services et daemon Linux.
Il gère de la cohérence et dépendances des services ainsi que leurs initialisation au démarrage Linux.

Systemd utilise un concept d'unit, qui peut être un service, sockets, point de montage, périphériques, etc.
Les fichiers de configuration sont stockés dans /lib/systemd/system/.
Les fichiers des services comportent une extension .service alors que les sockets ont une extension .socket.

Le répertoire /lib/systemd/system/ avec la configuration des unités

Par exemple le service SSH possède deux fichiers :

  • /lib/systemd/system/ssh.service
  • /lib/systemd/system/ssh.socket

Le fichier du service stocke le nom, description, l'emplacement du fichier de configuration, les commandes à utiliser pour démarrer ou arrêter le service.
Du côté du fichier de configuration du socket, on y trouve le nom du service associé et le port en écoute.

Exemple de fichier de configuration d'un service et socket systemd

Enfin notez la ligne Alias qui permet de donner un autre nom au service.
Cet alias peut être utilisé dans la commande systemctl.

Les fichiers de configuration systemd sont modifiables avec n'importe quel éditeur de texte, comme souvent avec les fichiers de configuration Linux.
Mais on peut aussi utiliser la commande systemctl qui ouvrira le fichier de configuration de l'unité dans l'éditeur de texte par défaut.
Pour cela, on utilise la commande edit comme ceci :

sudo systemctl edit [nom service]

Quels sont les units systemd ?

Voici la liste des unités de systemd :

Type d'unitéDescription
AutomountPoints de montage automatique
DeviceNoms de périphérique du noyau, que vous pouvez voir dans SYSFS et UDev
MountLes points de montage
Path: file or directoryFichier et répertoire
ScopeProcessus externes non démarrés par systemd
SliceUne unité de gestion de processus
SnapshotSauvegarde des états de snapdots
SocketIPC (inter-process communication) socket
SwapFichier du swap
TimerMinuterie système
La liste des units systemd

Pour lister les unités possibles, utilisez la commande systemctl de cette manière :

systemctl -t help

Enfin utilisez la commande systemctl suivante pour lister les unités installés dans votre système Linux :

systemctl list-units

Comment gérer et configurer les services systemd avec systemctl

systemctl est la commande pour gérer les services Linux.

Quand on lance celle-ci sans aucun paramètre, la liste des daemon et service s'affiche.
Dans la liste se trouve aussi le statut du daemon.

La liste des daemon et service sur Debian

Si vous ne désirez lister que les daemons et services actifs alors utilisez la commande systemctl de cette manière :

systemctl list-units --type=service

Du coup systemctl s'utilise de la même manière par exemple :

systemctl start sshd
systemctl start sshd.service
systemctl stop sshd

Enfin pour vérifier si un service est actif et démarré.

systemctl is-active ssh
systemctl status ssh
vérifier si un daemon est actif avec systemctl

Cette commande systemctl permet d'effectuer d'autres opérations sur les services.
Le tutoriel suivant vous donne beaucoup d'exemples d'utilisation :

Bravo ! vous avez réussi à redémarrer un service ou daemon sur Linux.

Comment ajouter ou créer un services et daemon dans Linux

Dans les précédentes versions de Debian, on trouvait le fichier /etc/rc.local qui permettait d'exécuter des commandes au démarrage du PC ou serveur
Ce dernier a disparu.
Mais on peut le recréer en ajoutant un nouveau service.

Pour cela, recréez le fichier /etc/rc.local.
Les commandes que l'on souhaite exécuter doivent se trouver avant le exit 0.

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/root/scripts/firewall.sh
Xvfb :2 -screen 0 800x600x24 &

#route add 10.24.71.69 default gw 51.210.1.254
#route add 10.24.71.9 default gw 51.210.1.254
#route add 10.24.71.29 default gw 51.210.1.254

# Demarrage des tomcat
#for i in `ls /home/|grep tomcat` ; do user=`echo $i|sed 's/\/home\///g'` ; su - $user -c startup.sh ; done


exit 0

puis on le rend exécutable avec chmod :

chmod +x /etc/rc.local

Ensuite on créé un service rc-local.service.
Pour cela, créez le fichier /etc/systemd/system/rc-local.service avec le contenu suivant :

[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target

Le service va alors exécuter le fichier /etc/rc.local.
A adapter selon vos besoin et ce que vous souhaitez ajouter comme service.

Enfin on rend le service actif avec la commande systemctl :

systemctl enable rc-local.service

Cela créé le fichier /etc/systemd/system/multi-user.target.wants/rc-local.service.

Enfin pour le démarrer :

systemctl start rc-local.service
Bravo ! vous avez réussi à créer et ajouter un service et daemon Linux.

Les journaux des services et daemon Linux

L'exécution des daemons est enregistré dans les journaux systèmes.
Lorsque ce dernier ne s'exécute pas correctement, il faut consulter les journaux pour obtenir des informations.

La commande journalctl peut à ce moment là aider.
Pour avoir la fin du journal systemd, il faut utiliser la commande journalctl suivante :

journalctl -xe

Par exemple, ci-dessous, des erreurs lors du lancement du daemon MySQL.

journalctl pour lire les fichiers journaux

Nous vous conseillons aussi de jeter un coup d'oeil au journal /var/log/daemon.log qui contient souvent beaucoup d'informations utiles.

Tags: