Services
Un article de Wiki de la communauté Mandriva.
Si vous voulez contribuer, cliquez simplement sur l'onglet modifier. Consultez également les autres pages dont la forme est à réviser.
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 :
- un clic gauche sur l'étoile jaune du menu K, puis Système/Configuration/Configurer votre ordinateur
ou, plus simplement :
- un double-clic sur l'icône du bureau Configurer votre ordinateur
puis, après avoir donné votre mot de passe root :
- choisissez Système/Activez ou désactivez les services système...
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 (voir aussi plus bas dans cette page).
Notez qu'on peut également accéder très vite à cette interface en lançant en console, sous root, la commande drakxservices.
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 à un programme, 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) :
service nom_du_service start service nom_du_service stop service nom_du_service restart service nom_du_service status
restart et status ne sont pas supportés par tous les scripts associés aux services.
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 :
chkconfig nom_du_service on
pour qu'il ne le soit pas :
chkconfig nom_du_service off
pour lister tous les services disponibles et leur configuration courante faites :
chkconfig --list
et pour vous assurer de la disponibilité d'un certain service :
chkconfig --list nom_du_service
Ce qui est affiché par ces deux dernières commandes deviendra plus clair pour vous lorsque vous aurez lu la section suivante. Pour plus d'informations sur cette commande voyez 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 Mandrake 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] DrakXServices
DrakXServices est un outil graphique, que nous avons déjà évoqué et décrit plus haut, disponible à partir du Centre de Contrôle Mandriva, via les menus Système puis Activer ou désactiver les services système. On peut aussi l'invoquer en tapant dans une console graphique (Konsole, rxVT...), sous root : drakxservices (en minuscules et sans guillemets) puis en pressant la touche ENTREE : l'interface graphique s'affichera alors.
Au démarrage du système, certains services (programmes fonctionnant en arrière-plan) réalisant des tâches diverses sont lancés. Cet outil vous permet d'administrer ces services.
Une description détaillée en est donnée dans la Documentation officielle de Mandriva (consulter via Menu K Autres applications->Documentation).
[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 c'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). Les outils graphiques, comme le Centre de Contrôle Mandriva, considèrent que chaque script se trouvant dans ce répertoire contrôle un service ; si donc vous y ajoutez un script, il apparaîtra dans la liste des services du Centre de Contrôle Mandriva ainsi que dans les outils équivalents. Il pourra aussi être géré par les commandes service et chkconfig.
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. Vous devez évidemment vous assurer que nom_du_service correspond réellement au nom du script et que le bit d'exécution a été positionné sur ce script par la commande chmod.
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é 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 :
ls /etc/rc.d init.d/ rc* rc0.d/ rc1.d/ rc2.d/ rc3.d/ rc4.d/ rc5.d/ rc6.d/ rc.local* rc.modules* rc.sysinit*
Le répertoire init.d que vous voyez ici est le même que celui qui est accessible, via un lien symbolique, sous le répertoire /etc. 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).
À partir de la version 8.0 de Mandriva Linux, la plupart de ces fichiers et répertoires sont aussi accessibles par des liens situés immédiatement sous le répertoire /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 vers les scripts qui se trouvent sous /etc/init.d.
S12syslog par exemple est un lien vers le script /etc/init.d/syslog et est démarré après S10network (qui est un lien vers le script /etc/init.d/network) mais avant S15cups.
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 sera utilisée avec l'option reset, voir plus loin). Par exemple, le script network contient la ligne :
# chkconfig: 2345 10 90
voici le début de ce script :
#! /bin/bash # network Bring up/down networking # chkconfig: 2345 10 90 # description: Activates/Deactivates all network interfaces # configured to start at boot time.
La configuration standard pour ce script est qu'il soit démarré aux niveaux (runlevel) 2, 3, 4 et 5 avec un lien S10network dans les répertoires associés aux niveaux (/etc/rc.d/rc.2 à /etc/rc.d/rc.5) et arrêté aux niveaux 0, 1 et 6 avec 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 lorsqu'on utilise l'option reset :
chkconfig network reset
La commande précédente va créer les liens alors que la commande suivante va activer le service pour les niveaux prévus par la ligne chkconfig: du script associé au service :
chkconfig nom_du_service on
Enfin cette commande va désactiver le service pour tous les niveaux :
chkconfig nom_du_service off
[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)
Le système est toujours à 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).
À chaque changement de niveau (par ex: 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 du répertoire associé au niveau d'exécution afin de lancer (lien S) ou d'arrêter (lien K) les services. 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.
[modifier] Comment utiliser ce système
La commande chkconfig vous permet de contrôler finement le démarrage et l'arrêt des services en fonction des niveaux d'exécution. Dans certains cas, il peut être utile de reconfigurer ainsi les services.
Prenez par exemple le service gpm. gpm correspond au démon qui gère l'utilisation de la souris (General Purpose Mouse Daemon). Vous en avez besoin au niveau 3 (console) pour pouvoir utiliser une souris. Au niveau 5 (interface graphique), il est inutile, il peut même provoquer des incompatibilités. En utilisant chkconfig, vous pouvez configurer le service gpm pour qu'il ne soit actif qu'au niveau 3 :
chkconfig --level 3 gpm on chkconfig --level 5 gpm off
Cela va créer un lien de type S dans le répertoire rc3 et un lien de type K dans le répertoire rc5.