Service

Un article de Wiki de la communauté Mandriva.

(Redirigé depuis Services)
Jump to: navigation, search



CETTE PAGE EST UNE VERSION RÉVISÉE DE LA PAGE MAINTENANT OBSOLÈTE DE L'ANCIENNE BASE DE CONNAISSANCES : http://club.mandriva.com/xwiki/bin/view/KB/AdminAservice ptyxs 26 février 2008 à 14:53 (CET)



Sommaire

[modifier] Introduction aux services du système

Pour un premier contact avec les services, sous une Mandriva, vous pourriez jeter un coup d'œil à l'interface graphique très claire et facile à utiliser que Mandriva consacre à la gestion des services.

Pour vous rendre dans la rubrique consacrée aux services du Centre de Contrôle Mandriva (MCC), faites, par exemple :


Menu > Outils > Outils système > Configurer votre ordinateur > Système > Gérer les services système


ou, plus simplement, tapez dans une console sous root :


Image:Konsole.png
[root@ordi ~]# drakxservices


Vous verrez alors apparaître un écran affichant des informations sur les services, disposées en colonnes. Vous serez à ce moment dans l'interface graphique DrakXServices.


Image:Mcc services.png


La première colonne contient un nom de service plus ou moins compréhensible.

La deuxième colonne contient l'indication actif ou arrêté.

La troisième colonne est un bouton qui permet d'obtenir quelques informations sur le service.

Ensuite, vient une case à cocher nommée Au démarrage, suivie par deux boutons : Démarrer et Arrêter. Ceci représente ce que vous pouvez faire avec un service : vous pouvez le démarrer ou l'arrêter, et vous pouvez choisir si le service doit être automatiquement lancé au démarrage du PC ou pas.

Toutefois, avant de vous lancer dans des modifications en cochant ou décochant des cases, mieux vaudrait lire le contenu de cette page...

Mais qu'est-ce qu'un service ? Par rapport à beaucoup de programmes ordinaires, un service n'a pas besoin d'information en provenance de l'utilisateur (il fonctionne à l'arrière-plan), sauf pour le démarrer et l'arrêter, et même cela peut être fait automatiquement.

Il existe deux sortes de services :

  • Les services qui fonctionnent pendant toute la durée de la session (jusqu'à ce que le système soit arrêté). En termes Unix, ils sont appelés aussi des daemons (esprit bienfaisant), expression que l'on traduit le plus souvent en français par démon. Ce sont habituellement des serveurs qui sont démarrés et qui attendent en permanence des requêtes entrantes, comme un serveur Web, un serveur de messagerie, le service d'impression ou un serveur de polices, ou encore un planificateur de tâches comme crond.
  • Les services qui sont démarrés, utilisés puis arrêtés lorsqu'ils ont fini leur travail. Ce sont en général des scripts pour la maintenance du système ou pour activer certaines fonctionnalités, comme le script numlock dont le seul but est d'activer le pavé numérique en mode chiffre pendant la phase de démarrage du PC, ou le service anacron.

Il existe de nombreux autres outils graphiques pour configurer les services. Webmin et Linuxconf le permettent. KDE et GNOME offrent également leurs propres outils de configuration. On peut aussi utiliser tksysv et sa version console ntsysv (il existe pour chacun d'eux un paquetage Mandriva que vous pouvez installer).

Bien que le Centre de Contrôle Mandriva fasse ce qui doit être fait, vous pouvez préférer l'un de ces autres outils. Ne craignez pas de rendre le système incohérent en utilisant des outils différents : ils utilisent tous les mêmes commandes, à savoir service et chkconfig, dont nous allons parler maintenant.

[modifier] Les commandes service et chkconfig

La commande service, un simple script shell sous le répertoire /sbin, est utilisée pour afficher l'état du service (status), pour l'arrêter (stop) ou pour le démarrer (start ou restart).

Cette commande prend deux arguments : le nom du service (qui est le nom d'un fichier qu'on trouve dans le répertoire /etc/init.d), et ce qui doit être fait, ce qui donne des commandes de la forme suivante (à lancer sous root) :

Image:Konsole.png
[root@ordi ~]# service nom_du_service start
Image:Konsole.png
[root@ordi ~]# service nom_du_service stop
Image:Konsole.png
[root@ordi ~]# service nom_du_service restart
Image:Konsole.png
[root@ordi ~]# service nom_du_service status

restart et status ne sont pas supportés par tous les scripts associés aux services. La commande avec l'argument status (s'il est supporté) vous indique si le service est actuellement activé ou pas :

Image:Konsole.png
[root@ordi ~]# service avahi-daemon status
Le service Avahi est en cours d'exécution


Avertissement

La commande service n'a pas d'effet permanent au-delà de la session courante, au prochain démarrage du système elle n'aura plus le moindre effet.

La commande chkconfig liste, ajoute, supprime et configure de façon permanente les services.


Pour qu'un service soit lancé automatiquement au démarrage du PC, vous pouvez utiliser, sous root :

Image:Konsole.png
[root@ordi ~]# chkconfig nom_du_service on

pour qu'il ne le soit pas :

Image:Konsole.png
[root@ordi ~]# chkconfig nom_du_service off

pour lister tous les services disponibles et leur configuration courante faites :

Image:Konsole.png
[root@ordi ~]# chkconfig --list

acpi 0:arrêt 1:arrêt 2:marche 3:marche 4:marche 5:marche 6:arrêt
acpid 0:arrêt 1:arrêt 2:arrêt 3:marche 4:marche 5:marche 6:arrêt
alsa 0:arrêt 1:arrêt 2:marche 3:marche 4:marche 5:marche 6:arrêt
anacron 0:arrêt 1:arrêt 2:marche 3:marche 4:marche 5:marche 6:arrêt
apmd 0:arrêt 1:arrêt 2:marche 3:marche 4:marche 5:marche 6

(nous n'avons donné qu'une petite partie d'une sortie possible). La sortie indique le comportement du service dans votre système pour chaque niveau d'exécution représenté par un chiffre. Voir les sections suivantes pour plus de détails.

Et pour vous assurer de la disponibilité d'un certain service :

Image:Konsole.png
[root@ordi ~]# chkconfig --list nom_du_service

Par exemple :

Image:Konsole.png
[root@ordi ~]# chkconfig --list anacron

anacron 0:arrêt 1:arrêt 2:marche 3:marche 4:marche 5:marche 6:arrêt

Ce qui est affiché par ces commandes avec l'option --list deviendra plus clair pour vous lorsque vous aurez lu les sections suivantes. Pour plus d'informations sur cette commande, pensez aussi à man chkconfig.

Comme les outils graphiques dérivés, ces commandes nécessitent que vous soyez root. Rien ne vous oblige à les utiliser à la place du Centre de Contrôle Mandriva ou d'un autre outil graphique ; pour ma part, je les préfère parce que je vais plus vite en tapant une commande qu'en cliquant sur une interface graphique !!


Pouvoir contrôler les services a plusieurs avantages :

  • Réduire la charge du système :

Bien que les démons dorment la plupart du temps, ils utilisent néanmoins de la mémoire système. La commande service vous permet de démarrer les services à la demande ; par exemple vous pouvez démarrer le service d'impression juste avant d'imprimer et l'arrêter juste après.

  • Améliorer la sécurité du système :

Les démons écoutent sur certains ports. Plus de démons actifs implique plus de ports ouverts et donc plus de points d'attaque possibles. D'un autre côté, il existe aussie des services qui améliorent la sécurité du système.

  • Éviter les redémarrages du système :

Si vous changez la configuration d'un démon, le démon doit en général être redémarré afin de prendre en compte les modifications. Si vous installez un paquetage qui contient un service, le service n'est pas démarré immédiatement mais est configuré pour être lancé automatiquement au prochain démarrage du système.
La commande service vous permet de démarrer un service une fois le paquetage installé, sans être obligé de redémarrer votre PC ...

  • Réduire le temps de démarrage :

Une bonne partie du temps nécessaire au démarrage d'un système Linux est pris par le démarrage des services. Si vous configurez votre système afin qu'il n'active que les services nécessaires en permanence, vous pouvez réduire le temps de démarrage de votre système de façon considérable.

[modifier] Comprendre et personnaliser le lancement des services

Cette section est à l'attention des personnes qui ne se contentent pas seulement de savoir utiliser les choses, mais qui veulent savoir aussi pourquoi les choses sont faites comme elles le sont. Vous pouvez vivre avec Linux sans cela, mais à mon avis il est intéressant d'avoir une idée des concepts qui se cachent derrière tous ces dispositifs. Cela pourrait aussi un jour vous aider à créer vos propres services…

[modifier] Les scripts associés aux services

Si vous êtes curieux, vous voulez sûrement savoir comment le système sait quels services sont disponibles. Les scripts qui gèrent les services sont situés dans le répertoire /etc/rc.d/init.d (on peut accéder aussi à ce répertoire via un lien symbolique /etc/init.d). Pour que les outils du système traitent correctement les services, il sera nécessaire que ceux-ci soient contrôlés par un script se trouvant dans ce répertoire.

Un script qui gère un service contient au moins les commandes pour démarrer et arrêter le service en question. Regardons le modèle de base d'un tel script :

#! /bin/sh

# chkconfig: niveaux_d_exécution numéro_du_lien_de_démarrage numéro_du_lien_d_arrêt
# description: brève description de ce à quoi sert le service

. /etc/rc.d/init.d/functions

case "$1" in 
            start) 
            echo -n "Démarrage du service : " 
            commande(s) pour démarrer le service 
            echo
            ;;

            stop)
            echo -n "Arrêt du service : "
            commande(s) pour arrêter le service
            echo
            ;;
           
            status) 
            status nom_du_service
            ;;

            *) 
            echo "*** Usage: nom_du_service {start|stop|status}"
            exit 1
esac

exit 0

Si vous avez déjà quelque idée de la programmation en script shell, c'est très simple. Si, d'un autre côté, ces lignes sont fort obscures pour vous, sachez qu'outre les explications que nous allons donner, vous trouverez tout ce qui est nécessaire pour comprendre ce squelette de script dans la page du Wiki de Mandriva sur l'écriture des scripts.
Les lignes qui commencent par # chkconfig: et # description: seront expliquées plus loin. La ligne :

.  /etc/rc.d/init.d/functions

sert à invoquer un script functions qui contient des fonctions du shell prédéfinies. Elles ne sont utiles ici que pour gérer l'argument status (cf. la commande : status nom_du_service). Ensuite, nous trouvons une instruction :

case

qui permet au script d'exécuter les bonnes commandes en fonction du paramètre qui a été fourni au script qui peut être stop, start ou status. La ligne :

echo "*** Usage: nom_du_service {start|stop|status}"

est exécutée lorsque l'argument passé n'est pas dans la liste attendue et permet ainsi d'afficher un message explicatif. Si vous avez créé vous-même un service, vous devez évidemment vous assurer que nom_du_service correspond réellement au nom du script et que celui-ci a été rendu exécutable par la commande chmod.

Image:Konsole.png
[root@ordi ~]# chmod +x /etc/init.d/nom_du_service

[modifier] Liens avec les niveaux d'exécution (runlevel)

Certains services ont besoin d'autres services pour fonctionner. Par exemple, le service httpd (le serveur Web Apache) ne démarrera pas correctement si le script network n'a pas activé au préalable les interfaces réseau. Comment donc est déterminé l'ordre d'activation des services au démarrage du système ?

Regardons pour commencer le contenu du répertoire /etc/rc.d :

Image:Konsole.png
[utilisateur@ordi ~]$ ls /etc/rc.d

init.d/ rc* rc0.d/ rc1.d/ rc2.d/ rc3.d/ rc4.d/ rc5.d/ rc6.d/ rc.local* rc.sysinit*

Le répertoire init.d que vous voyez affiché ici est celui qui est aussi accessible via le lien symbolique /etc/init.d. Vous voyez aussi plusieurs répertoires et des fichiers dont le nom commence par rc (rc est l'abréviation de run command = lancer une commande en anglais).

La plupart de ces fichiers et répertoires sont aussi accessibles par des liens situés immédiatement sous le répertoire /etc (/etc/rc0.d, /etc/rc1.d, etc.).

Si vous regardez maintenant sous un des répertoires rc<numéro>.d, vous y trouverez plusieurs fichiers, certains ont des noms qui commencent par la lettre S et d'autres par la lettre K, K ou S étant suivie par un nombre à deux chiffres. S est un raccourci pour start (démarrer) et K un raccourci pour kill (arrêter, stopper). Le nombre représente l'ordre de démarrage et d'arrêt des services. En fait, tous ces fichiers ne sont que des liens symboliques vers les scripts qui se trouvent sous /etc/init.d.

S17alsa par exemple est un lien vers le script /etc/init.d/alsa et est démarré après S14acpid (qui est un lien vers le script /etc/init.d/acpid) mais avant S18sound.

Vous n'avez pas à vous soucier de créer ces liens lorsque vous configurez un service standard avec la commande chkconfig parce que la plupart de ces scripts contiennent déjà une ligne chkconfig qui en permettra la création automatique (ou « à la main » avec l'option reset, voir plus loin). Voici, par exemple, le début du script network :


#! /bin/bash
#
# network       Bring up/down networking
#
# chkconfig: 2345 10 90
# description: Activates/Deactivates all network interfaces configured to \
#              start at boot time.


Voyons ce que signifie la ligne :

# chkconfig: 2345 10 90

Cette ligne signifie que ce script sera démarré aux niveaux d'exécution (runlevel) 2, 3, 4 et 5 avec une priorité 10 et qu'il sera arrêté à tous les autres niveaux (donc 0, 1 et 6) avec la priorité 90.

Ceci impliquera automatiquement la présence d'un lien S10network dans les répertoires associés aux niveaux (/etc/rc.d/rc.2 à /etc/rc.d/rc.5) et d'un lien K90network dans les répertoires associés aux niveaux (/etc/rc.d/rc.0, /etc/rc.d/rc.1 et /etc/rc.d/rc.6).

Cette configuration est créée, avec tous les liens correspondants dans les différents répertoires rc?.d, lorsqu'on utilise l'option reset :

Image:Konsole.png
[root@ordi ~]# chkconfig network reset

La commande précédente va créer les liens indiqués dans la ligne chkconfig: du script. La commande suivante va créer le lien activant le service pour le niveau indiqués :

Image:Konsole.png
[root@ordi ~]# chkconfig --level niveau nom_du_service on

Enfin, cette commande va créer le lien désactivant le service pour le niveau indiqué :

Image:Konsole.png
[root@ordi ~]# chkconfig --level niveau nom_du_service off
Attention !

Ces deux dernières commandes, qui créent des liens de démarrage ou d'arrêt, ne mettent pas à jour pour autant la ligne chkconfig: du script du service dans /etc/init.d.

Il faut bien comprendre que la ligne chkconfig: d'un script de /etc/init.d définit une configuration par défaut, à laquelle il sera toujours possible de revenir par la commande chkconfig service reset, mais dont le système peut s'être écarté, soit à la la suite de commandes chkconfig service on ou chkconfig service off, soit en cliquant sur le bouton Arrêter ou Démarrer dans l'interface graphique du MCC, DrakServices.

[modifier] Qu'est-ce que les niveaux d'exécution (runlevels) ?

Les runlevels sont énumérés dans le fichier /etc/inittab :

# Default runlevel. The runlevels used by RHS are:

   # 0 - halt (Do NOT set initdefault to this)
   # 1 - Single user mode
   # 2 - Multiuser, without NFS
   # 3 - Full multiuser mode
   # 4 - unused
   # 5 - X11
   # 6 - reboot (Do NOT set initdefault to this)

A tout moment, le système est à un certain niveau d'exécution, la plupart du temps au niveau 3 (mode console pur) ou au niveau 5 (mode avec le serveur X, donc avec une interface graphique). Le niveau 1 ou niveau single est dédié à des tâches de maintenance.

À chaque changement de niveau (par exemple en démarrant le serveur X ou en l'arrêtant, en démarrant le système Linux ou en l'arrêtant), le script /etc/rc.d/rc est exécuté. Ce script parcourt les liens contenus dans le répertoire associé au niveau d'exécution, afin de lancer (lien S) ou d'arrêter (lien K) certains services. Le répertoire du niveau d'exécution 1 est /etc/rc.d/rc1, le répertoire du niveau 2 est /etc/rc.d/rc2 etc.

Cela explique pourquoi les répertoires /etc/rc.d/rc.0 et /etc/rc.d/rc6 contiennent essentiellement des liens de type K puisque tous les services doivent être arrêtés lorsqu'on arrête (niveau 0) ou relance (niveau 6) le système.

Ce système sophistiqué est appelé processus d'initialisation System V, parce qu'il a été introduit avec la version 5 d'Unix. À l'exception de Slackware, toutes les distributions Linux majeures l'utilisent. Slackware et les systèmes BSD utilisent le processus d'initialisation BSD-style qui regroupe plus ou moins tout le travail de l'initialisation et de maintenance des services dans un seul fichier. Pour plus de détails, voir aussi la section : #Liens avec les niveaux d'exécution (runlevel).

Astuce !

Pour vérifier le niveau d'exécution dans lequel vous vous trouvez, tapez sous root :

Image:Konsole.png
[root@ordi ~]# runlevel

N 5

Pour changer de niveau d'exécution lancez la mère de tous les processus : la commande init. Pour passer en mode console, par exemple (attention sauvegardez d'abord les données de toutes vos applications ouvertes !!!) :

Image:Konsole.png
[root@ordi ~]# init 3