Configurer et gérer les services sur Debian

Gestion des services Debian

Sur Debian, un service (ou daemon / démon) est un script d’initialisation de type « System V » qui va permettre de gérer un serveur (serveur openSSH, serveur FTP, ou autre serveur NTP, etc…) ou tout simplement un programme qui va exécuter des tâches.
Ces scripts se trouvent dans le dossier /etc/init.d/.
Les services Debian étant résidents, il faut pour voir les lancer, les arrêter et les configurer. Bref, les gérer.

Gestion des services Debian ponctuellement

Pour gérer un service ponctuellement on utilise la commande service nom_du_service commande.
Cette commande prend plusieurs paramètres en fonction de ce que l’on veut faire du service.
En général on peut utiliser les commandes suivantes :

  • start : pour le démarrer
  • stop : pour l’arrêter
  • restart : pour le redémarrer ou le démarrer s’il est arrêté
  • reload : pour recharger la configuration sans le redémarrer (donc sans couper les connexions actives)
  • status : Pour connaitre l’état du service. Démarré ou arrêté.

Exemples :

root@debian:~# service nfs-common start
[ ok ] Starting NFS common utilities: statd idmapd.
root@debian:~# service nfs-common stop
[ ok ] Stopping NFS common utilities: idmapd statd.
root@debian:~# service nfs-common restart
[ ok ] Stopping NFS common utilities: idmapd statd.
[ ok ] Starting NFS common utilities: statd idmapd.
root@debian:~# service nfs-common reload
[ ok ] Usage: nfs-common {start|stop|status|restart}.
root@debian:~# service nfs-common status
all daemons running

Il ne faut pas oublier que ces commandes sont ponctuelles.
Au prochain redémarrage du serveur les services récupéreront le statut qui est défini par défaut.
Si on souhaite modifier le comportement global du service, il faut passer à la configuration.

Configurer les services Debian

Les services Debian sont exécutés en fonctions de leurs niveaux d’attribution de « runlevel » : 0, 1, 2, 3, 4, 5, 6.

  • Le niveau 0 : extinction de l’ordinateur.
  • Le niveau 1 : le mode « single-user », ne contient que les services de base. C’est un peu le mode « sans échec » de Windows, pour les opérations de maintenance
  • Le niveau 2 : le niveau standard qui inclut… tout. Les services réseau, les serveurs, l’interface graphique, etc…
  • Le niveau 6 : identique au niveau 0 sauf qu’il est utilisé en cas de reboot et pas d’arrêt complet
  • Les niveaux 3, 4 et 5 : identiques au niveau 2. Sont présent pour donner plus de finesses à l’administrateur en cas de besoin.

Un service est constitué au minimum :

  • d’un fichier de script répertorié dans le dossier /etc/init.d
  • d’un lien symbolique de démarrage comme « S10service », placé dans l’un des 6 répertoires /etc/rc?.d/. En général : 2, 3, 4, 5
  • d’un lien symbolique pour l’arrêt du service comme « K20service », placé dans l’un des 6 répertoires /etc/rc?.d/. En général : 0, 1, 6

Pour les scripts de démarrage (start), le système place un « S » devant le nom du script.
Pour les scripts d’arrêt (kill), le système place un « K » devant le nom du script.

Après chaque lettre « S » ou « K » il y a un nombre : 10, 20, etc… C’est ce chiffre qui donne l’ordre d’exécution du service au sein du runlevel.
Cela permet de gérer les priorités. 20 s’exécute avant 30, qui s’exécute avant 40, etc… Donc si on on veut faire démarrer un service après un autre qui à une priorité de 20, on lui mettra 30 par exemple.

A noter que si dans un même runlevel il y a des « K » et des « S », les « K » sont traités avant les « S ».

Configurer les services Debian avec rcconf

rcconf permet de choisir simplement quels services seront lancés ou non au démarrage de la machine.
Si on désactive un service au démarrage, rien n’empêche de le lancer d’un coup de service lorsque la machine est allumée. Mais comme expliqué plus haut, le service ne sera pas lancé au prochaine redémarrage.

S’il n’est pas installé, on installe rcconf :

aptitude install rcconf

On lance rcconf :

rcconf

Dans l’interface qui s’ouvre on coche/décoche les services. Et on enregistre.

L’inconvénient de rcconf et qu’on ne peut pas gérer les runlevels. C’est à dire définir à quel moment le script est lancé et arrêté. On active/désactive et c’est tout.
Pour gérer cette finesse il y a le programme sysv-rc-conf.

Configurer les services Debian avec sysv-rc-conf

sysv-rc-conf fait la même chose que rcconf mais peut également déterminer les runlevels de démarrage et d’arrêt, de 0 à 6. Il peut aussi arrêter/démarrer un service à la volée comme le fait la commande service.

Installation :

aptitude install sysv-rc-conf

Et on lance :

sysv-rc-conf

Dans l’interface on peut choisir d’activer/désactiver chaque runlevel de chaque service.

sysv-rc-conf permet également de lister tous les services et leurs runlevels. Ca permet d’avoir une vue d’ensemble rapidement :

sysv-rc-conf --list

A ce stade ce serait presque parfait… sauf… que… sysv-rc-conf ne gère pas les priorités entre les différents services d’un même runlevel, ni les dépendances.
Donc si on veut aller encore plus loin… Faut se le faire à la main, à l’ancienne, avec update-rc.d !

Gestion des services Debian avec update-rc.d et les en-têtes de script LSB

Comme toujours, c’est en faisant tout à la main qu’on a le plus de possibilités. Surtout celles de tout casser 🙂 Et pour cela on utilise la commande update-rc.d.
Elle permet d’ajouter, modifier, supprimer un service. Définir les priorités et les dépendances.

Les en-têtes de script LSB ?

Depuis Debian 6.0 « Squeeze », il y a une nouvelle méthode pour gérer les services et dépendances.
La configuration se fait directement dans chaque script de service et non plus obligatoirement en passant des paramètres à la commande update-rc.d

Voici par exemple celle du serveur de courrier Exim :

### BEGIN INIT INFO
# Provides:          exim4
# Required-Start:    $remote_fs $syslog $named $network $time
# Required-Stop:     $remote_fs $syslog $named $network
# Should-Start:      postgresql mysql clamav-daemon greylist spamassassin
# Should-Stop:       postgresql mysql clamav-daemon greylist spamassassin
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: exim Mail Transport Agent
# Description:       exim is a Mail Transport agent
### END INIT INFO

Dans les grandes lignes on voit :

  • Required-Start : les services qui doivent être lancés AVANT qu’Exim démarre
  • Required-Stop: Même chose pour l’arrêt
  • Should-Start : les services qui DEVRAIENT démarrer en même temps qu’Exim
  • Default-Start : les runlevels de démarrage
  • Default-Stop : les runlevels d’arrêt

Donc pour chaque script on indique dans son en-tête LSB ses contraintes de démarrage et d’arrêt.
Plus d’instructions à passer en paramètre à update-rc.d tout est dans le fichier.
Pour tout savoir sur les en-têtes LSB, man insserv.

Reste à appliquer les règles. Il suffit d’invoquer update-rc.d avec les options par défaut. Il ira lire la configuration LSB et appliquera les paramètres en conséquences.

update-rc.d [-n] nom_du_service defaults

L’option -n permet de tester la commande sans la jouer.

Reste maintenant à supprimer un service.
Là c’est plus simple.

update-rc.d [-n] [-f] nom_du_service remove

Là aussi on place -n pour tester que tout va bien se passer.

L’option -f permet de forcer la suppression des liens même si /etc/init.d/nom_du_service existe encore.
C’est à vérifier car je n’ai pas forcément d’erreur dans ce contexte.

Pour finir, si on souhaite réactiver le service ultérieurement, on repasse la commande :

update-rc.d [-n] nom_du_service defaults

Et tout repart.

Un commentaireLaisser un commentaire

Vous avez aimé cet article ? Réagissez !

Votre email ne sera pas publié. Les champs requis sont marqués d'une astérisque *