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.
Table des matières
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.
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.
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.
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 |
Automount | Points de montage automatique |
Device | Noms de périphérique du noyau, que vous pouvez voir dans SYSFS et UDev |
Mount | Les points de montage |
Path: file or directory | Fichier et répertoire |
Scope | Processus externes non démarrés par systemd |
Slice | Une unité de gestion de processus |
Snapshot | Sauvegarde des états de snapdots |
Socket | IPC (inter-process communication) socket |
Swap | Fichier du swap |
Timer | Minuterie système |
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.
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
Cette commande systemctl permet d’effectuer d’autres opérations sur les services.
Le tutoriel suivant vous donne beaucoup d’exemples d’utilisation :
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
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.
Nous vous conseillons aussi de jeter un coup d’oeil au journal /var/log/daemon.log qui contient souvent beaucoup d’informations utiles.
Liens
- Systemd : Configuration et fonctionnement des services Linux (daemon)
- Comment fonctionnement les services init.d Linux
- Comment créer un service Linux (systemd)
- Systemctl Linux : utilisation et exemples
- Comment démarrer, arrêter, redémarrer un service sur Linux
- Comment utiliser journalctl pour voir les journaux Linux dans systemd
- Quels sont les journaux Linux de /var/log/ et comment les lire
- Crontab et cron Linux : utilisations et exemples