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 :
1 : mode mono-utilisateur ; à utiliser en cas de gros pépin !
2 : mode multiutilisateur, sans réseau ;
5 : comme le niveau d'exécution 3, mais avec le lancement de l'interface de login graphique ;
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.
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 |
---|---|
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.
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
Où nom_du_service
est le nom du service à contrôler tel que listé avec
chkconfig --list, et l'action
est une des suivantes :
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.
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.
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.
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.