Daemon et service Linux : configuration et fonctionnement

Bloqueur de pub détectée - Vous bloquez l'affichage des publicités.
Pour soutenir le site, merci de bien vouloir laisser les publicités s'afficher.

Plus d'informations : Comment désactiver les bloqueurs de publicité sur un site internet.

Les daemon sur Linux permettent de faire fonctionner des programmes dès le démarrage et en tâche de fond.
On peut aussi les appeler services.

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.

Daemon Linux : configuration et fonctionnement

Introduction aux services et daemon

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 un système daemon 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.

Fonctionnement des daemon et services

Le fonctionnement des daemon s'appuie sur plusieurs scripts se trouvant dans le dossier /etc.
Cette partie est identique pour la plupart des distributions :

  • /etc/init.d : ce dernier stocke les scripts de lancement des daemons
  • /etc/default : stocke les fichiers de configuration des daemons et services. La plupart du temps il s'agit des paramètres de lancement. La configuration a probablement parlé de l'application se trouve dans /etc/
  • /etc/rcX.d : stocke les scripts runlevel. Ces derniers se déclenchent lors de différents évènements : allumage, arrêt, etc.
  • /etc/inittab est le fichier de configuration des runlevel

Prenons le cas du démarrage de l'ordinateur.
Le runlevel pour cet évènement se déclenche (souvent /etc/rc2.d) est parsé et tous les runlevel commençant par S vont être démarrés.
Chaque daemon va alors exécuter le script /etc/init.d et lire la configuration dans /etc/default.

Il se passe la même chose lors de l'arrêt de l'ordinateur.

/etc/init.d

Il s'agit des scripts de lancement des daemon et services.

Certains sont liés à des applications installées, d'autres à des utilitaires systèmes.
En général ces derniers portent le nom du service et application.
Par exemple apache2 correspond à l'application Web Apache.

On peut voir un daemon cron qui correspond au tâche planifiée cron.
Plus d'informations :

Les scripts /etc/init.d

Tous ces scripts sont écrits en langage en shell.
Ci-dessous, un exemple de script init.d qui permet de lancer apache

Exemple du contenu d'un script /etc/init.d

Les runlevel (/etc/rcX.d)

Ce fonctionnement est spécifique à SysVinit.

Enfin on trouve les runlevel qui s'exécutent à différents états de l'ordinateur selon le numéro de ce dernier.
Tous les runlevel pointent vers le script d'init.d

  • S pour start indique un lancement
  • K pour Kill tue le daemon

Les numéros derrière S ou K sont les priorités de lancement.
Plus le numéro est petit et plus le script sera lancé plus tôt.
Ainsi en passant un runlevel d'un S à K, vous pouvez désactiver le lancement d'un daemon au démarrage de l'ordinateur.
Voir plus bas.

Par exemple ci-dessous, on voit que halt qui correspond à l'arrêt de l'ordinateur possède le chiffre 12 alors que hddtemp possède 01.
Hddtemp sera donc exécuté dans les premiers.

Généralement donc les applications installées ont des chiffres bas pour les runlevel d'arrêt de l'ordinateur et les numéros plus élevées correspondent à des daemon systèmes.
C'est l'inverse pour les runlevel de lancement.

Les runlevel sur Linux

Le fichier /etc/inittab donne la configuration des runlevel dont notamment celui de démarrage et arrêt de l'ordinateur.
Certaines configurations sont liées à la combinaisons de touches CTRL+ALT+Suppr ou un arrêt de l'ordinateur qui ne se fait pas correctement.

Contenu du fichier /etc/inittab

Par défaut sur une distribution Debian, on a les runlevel suivants :

  • 0 : runlevel à l'arrêt de l'ordinateur
  • 1 : singlemode lorsque l'ordinateur se lance en maintenance par exemple pour lancer un fsck.
  • 2-5 : runlevel au lancement de l'ordinateur en mode normal
  • 6: redémarrage via la commande reboot

/etc/default

Ce dossier stocke les configurations des services.
Il s'agit souvent de paramètres de lancement pour activer telle ou telle options de l'application.
Lorsque vous venez d'installer un daemon, il est donc conseillé de vérifier le contenu de ce fichier.

Le dossier de configuration /etc/default

Configuration des daemon et services

Désactiver un daemon et service

Si vous avez bien compris le fonctionnement général lorsque vous souhaitez désactiver un daemon ou service, vous devez passer le runlevel de S à K.
Il est possible d'utiliser pour cela la commande mv pour changer le nom du fichier mais cela n'est pas très pratique.

La commande update-rc.d permet de créer ou modifier facilement un runlevel.
update-rc.d permet donc de configurer les runlevel d'un daemon. En clair cela va installer les liens vers le script System-V

Pour créer les runlevel par défaut, on peut utiliser la commande de cette manière :

update-rc.d nom_daemon defaults

Pour retirer un script à l'arrêt :

update-rc.d -f nom_daemon remove
update-rc.d nom_daemon stop 45 S .

Enfin pour créer un runlevel 20 sur 2, 3, 4, 5 et Stop en 0, 1, 6 :

update-rc.d nom_daemon start 20 2 3 4 5 . stop 20 0 1 6 .
Bravo ! vous avez réussi à désactiver un service et daemon Linux.

Rdémarrer un daemon ou service

Plusieurs méthodes sont possibles pour relancer un daemon ou service.
Vous pouvez passer par le script, par exemple :

/etc/init.d/daemon start
/etc/init.d/daemon restart
/etc/init.d/daemon stop

Mais il est aussi possible d'utiliser la commande systemctl.

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

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

Vous avez trouvé cet article utile et interressant, n'hésitez pas à le partager...

Trouver la solution sur le forum d'aide

Vous êtes arrivé au terme de l'article Daemon et service Linux : configuration et fonctionnement mais vous n'avez pas trouvé la solution à votre problème...
Suivez ces articles du forum pour trouver une réponse ou demandez à votre tour de l'aide sur le forum

Tags: