Traduction "adaptée" de /usr/share/doc/sysvinit/README.runlevels.gz

Généralités

Tout les scripts exécutés lors de l'initialisation du système sont situés dans /etc/init.d. Les répertoires /etc/rc?.d (? = S, 0..6) contiennent des liens symboliques vers ces scripts. Ces scripts sont nommés de la manière suivante : S<2 chiffres><nom> (S pour "S"tart/début) ou K<2 chiffres><nom> (K pour "K"ill/arrêt).

(Exemple )

Si le nom d'un script est suffixé ".sh", le script est un "bourne shell" et peut être utilisée de manière optimale. Le comportement de l'exécution optimale n'est différent en aucune manière de celui d'une exécution normale.

Les niveaux de démarrage (runlevels) suivants sont définis :

Démarrage

Le niveau de démarrage correspondant est "N" (none ou bootup).

Lorsque le système s'initialise, les scripts de /etc/init.d/rcS sont exécutés. Ce qui se traduit par l'exécutions des scripts dénommés S* par ordre alphabétique (c'est à dire numérique!) . Les scripts sont exécutés avec comme premier argument 'start'.

Passage multi-utilisateurs

Après les exécutions précédentes, 'init' bascule vers le niveau de démarrage par défaut spécifié dans /etc/inittab , en général le niveau 2 (multi-utilisateurs).

Le programme 'init' exécute alors le script /etc/init.d/rc qui se charge de démarrer les services définis dans /etc/rc2.d par des scripts dénommé S<2 chiffres><nom>

Ici encore, les scripts sont exécutés par ordre alphabétique avec comme premier argument 'start'.

Changement entre niveaux

Lorsque l'on change (par exemple) du niveau 2 au niveau 3, /etc/init.d/rc exécute

  1. d'abord tous les scripts d'arrêt pour le niveau 2 (les scripts /etc/rc2.d/Knn<nom>) avec le premier argument 'stop',

  2. ensuite tous les scripts de démarrage du niveau 3 (les scripts /etc/rc3.d/Snn<nom>) avec le premier argument 'start'.

Lancer un script lors du démarrage

Plusieurs solutions :

  1. 1. placer le script dans /etc/init.d/rc.boot
  2. 1. placer le script dans /etc/init.d

      2. puis utiliser update-rc.d 
  3. 1. étudier l'exemple /etc/init.d/skeleton

      2. puis utiliser update-rc.d 

Application

Appliquer au démarrage des paramètres d' optimisation des accès disques (hdparm ).

Anthony FACCHIN

dans notre cas, on veut

  1. exécuter le script /etc/init.d/hdparm.sh à chaque démarrage. On a donc besoin d'un lien symbolique dans le répertoire /etc/rcS.d
  2. ensuite, nous voulons que le script s'exécute vers la fin de la série ; nous lui donnerons donc le numéro d'ordre 60 par exemple. Enfin, le nom du lien doit commencer par la lettre S.

créer le lien symbolique, en passant par le script Debian update-rc.d :

 update-rc.d    hdparm.sh start 60 S .

NB L' installation des paquets hwtools , hdparm suggère le nom hwtools (au lieu de hdparm.sh comme ci-dessus). Ce nom est effectivement plus générique, et le fichier exemple fourni comporte plusieurs sections

 #!/bin/sh
 #
 #       /etc/init.d/hwtools (previously /etc/rc.boot/hwtools)
 #

 # Optimize interrupts. You might want to add parameters if you want
 # to favor ttyS1 or ttyS0 or something else.
 if command -v irqtune >/dev/null 2>&1; then
 #   irqtune [HERE PUT ARGS]
   true
 fi

 # hdparm optimization
 # Switches on interrupts during transfers and does multi sector transfers
 if command -v hdparm >/dev/null 2>&1; then
 #   hdparm -q [HERE PUT ARGS]
   true
 fi

 # configure QIC-02 interface
 # see qic02conf(8)
 # qic02conf --card= --port= --dma= --irq=

En savoir plus