2. Les niveaux d'exécution

Tous les fichiers qui participent au démarrage du système se trouvent dans le répertoire /etc/rc.d. En voici la liste :

$ ls /etc/rc.d 
init.d/  rc0.d/  rc2.d/  rc4.d/  rc6.d/            rc.local*    rc.sysinit*
rc*      rc1.d/  rc3.d/  rc5.d/  rc.alsa_default*  rc.modules*

En premier lieu, comme nous l'avons vu, le fichier rc.sysinit est exécuté. C'est lui qui est chargé de mettre en place la configuration de base de la machine : type du clavier, configuration de certains périphériques, vérification des systèmes de fichiers, etc.

Puis le script rc est exécuté avec en argument le niveau d'exécution souhaité. Nous avons vu que le niveau d'exécution est un simple entier et que pour chaque niveau d'exécution <x> défini, il doit exister un répertoire correspondant rc<x>.d. Dans une installation typique de Mandriva Linux, vous pouvez donc voir que 6 niveaux d'exécution sont ainsi définis :

Intéressons-nous de plus près au contenu du répertoire rc3.d, par exemple :

$ ls /etc/rc.d/rc3.d/
K09dm@         S12syslog@   S24messagebus@     S40atd@         S91dictd-server@
S01udev@       S13partmon@  S25haldaemon@      S55sshd@        S92lisa@
S03iptables@   S15cups@     S25netfs@          S56ntpd@        S95kheader@
S05harddrake@  S17alsa@     S29numlock@        S56rawdevices@  S99local@
S10network@    S18sound@    S33nifd@           S75keytable@
S11shorewall@  S20xfs@      S34mDNSResponder@  S90crond@
$

Comme vous pouvez le voir, tous les fichiers de ce répertoire sont des liens symboliques et ils ont tous une forme bien particulière. Leur forme générale est :

<S|K><ordre><nom_du_service>

Le S signifie Start (soit démarrer) le service et K signifie Kill (soit arrêter) le service. Les scripts sont exécutés dans l'ordre des numéros croissants et si deux scripts ont le même numéro, c'est l'ordre alphabétique qui prévaudra. On peut voir également que chacun de ces liens symboliques pointe vers des scripts situés dans /etc/init.d (à l'exception du script local qui est chargé de contrôler un service bien particulier).

Quand le système entre dans un niveau d'exécution donné, il exécute d'abord les liens K dans l'ordre : rc vérifie où pointe le lien, puis appelle le script correspondant avec le seul argument stop. Puis il exécute les scripts S, toujours selon la même méthode, mis à part que le script est appelé avec l'argument start.

Ainsi, sans citer tous les scripts, on peut voir que lorsque le système entre dans le niveau d'exécution 3, il exécute d'abord la commande K09dm, c'est-à-dire /etc/init.d/dm stop. Enfin, il exécute tous les scripts S : S01udev en premier lieu qui invoque par la suite /etc/init.d/udev start, puis S03iptables, et ainsi de suite.

Armé de tout ceci, vous pouvez à votre guise créer un niveau d'exécution entier en quelques minutes (en utilisant le niveau 4, par exemple), ou empêcher le démarrage ou l'arrêt d'un service en effaçant le lien symbolique correspondant.

2.1. Configuration de services sur les niveaux d'exécution

Vous pouvez aussi utiliser la commande chkconfig pour ajouter, supprimer, activer ou désactiver des services d'un niveau d'exécution. Utilisez chkconfig --add nom_du_service pour ajouter (activer) le service nom_du_service sur tous les niveaux d'exécution pris en charge[33] et chkconfig --del nom_du_service pour supprimer (désactiver) un service sur tous les niveaux d'exécution.

[Astuce]Astuce

Tapez chkconfig --list pour voir tous les services disponibles, leur nom et leur statut sur tous les niveaux d'exécution.

En tapant chkconfig --levels 35 sshd on vous activez le serveur SSH (sshd) sur les niveaux d'exécution 3 et 5. Si vous tapez chkconfig --levels 3 sound off, vous supprimez la prise en charge du son sur le niveau 3. Si vous omettez le paramètre --levels levels_list, le service sera activé ou désactivé des niveaux 2, 3, 4 et 5. Notez toutefois que, de cette façon, vous pourriez activer des services sur des niveaux d'exécution qui ne les prennent pas en charge. Il est donc préférable de spécifier le niveau d'exécution à affecter.

2.2. Contrôle de services sur un système en exécution

Vous pouvez contrôler les services de votre système avec la commande service, peu importe qu'ils soient configurés pour être exécutés sur un niveau spécifique ou non. Voici sa syntaxe :

service nom_du_service action

nom_du_service est le nom du service à contrôler tel que listé avec chkconfig --list, et l'action est une des suivantes :

start

Démarre le service. Notez que la plupart des services émettent un avertissement lorsqu'ils sont déjà démarrés: utilisez restart à la place, voir plus loin.

stop

Arrête le service. Notez que tous les utilisateurs connectés à un service donné sont automatiquement déconnectés lorsque vous arrêtez ce service.

restart

Arrête et démarre un service. C'est comme si vous exécutiez service nom_du_service stop && service nom_du_service start. Veuillez noter que tous les utilisateurs connectés à un service donné sont automatiquement déconnectés de ce service lorsque vous le redémarrez.

autres actions tout dépendant du service

Tous les services ne prennent pas en charge les mêmes actions (celles suscités sont prises en charge par tous les services). Par exemple, vous pouvez utiliser reload pour recharger le fichier de configuration d'un service sans avoir à le redémarrer ; force-stop pour forcer l'interruption d'un service ; status pour vous informer au sujet du statut du service, etc. Exécutez service nom_du_service pour connaître les actions prises en charge par un service donné.



[33] « Prendre en charge » un niveau d'exécution signifie, par exemple, que les services reliés au réseau ne seront pas ajoutés au niveau 2, qui ne prend pas en charge la réseautique.