Comment fonctionnement les services init.d Linux

SysV init est l'ancienne suite logicielle de gestion des services et daemon Linux.
Il gère la cohérence entre les services dont les dépendances, les initialise au démarrage de Linux et permet à l'utilisateur de les gérer.
Par exemple, l'utilisateur peut démarrer, arrêter, redémarrer un service mais aussi l'activer ou le désactiver du démarrage Linux.
Dans les distributions Linux récentes, Il est remplacé par systemd.

Dans ce tutoriel, nous allons voir comment fonctionnent les services init.d Linux.

Comment fonctionnement les services init.d Linux

Comment fonctionnement les services init.d Linux

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.

Le répertoire /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

Comment gérer et configurer les services init.d

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.

Activer/Désactiver un service

Dans les distributions de type Debian, 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 .
Sur les distributions Redhat, il faut utiliser la commande chkconfig pour modifier la configuration d'un service.
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

Tags: