7.5. Scripts d'initialisation

Il y a deux types de scripts dans /etc/init.d :

Les scripts exécutés directement par init

Ce n'est le cas que pendant le processus d'amorçage ou si un arrêt immédiat du système est mis en route (lors d'une coupure de courant ou si l'utilisateur appuie sur Ctrl-Alt-Suppr). L'exécution de ces scripts est définie dans /etc/inittab.

Scripts exécutés indirectement par init

Ceux-ci sont exécutés lors d'un changement de niveau d'exécution et appellent toujours le script maître /etc/init.d/rc, qui garantit l'ordre correct des scripts concernés.

Tous les scripts sont regroupés dans /etc/init.d. S'y trouvent également les scripts permettant de changer de niveau d'exécution, qui sont appelés par l'intermédiaire de liens symboliques à partir de l'un des sous-répertoires (/etc/init.d/rc0.d vers /etc/init.d/rc6.d). Ce n'est que pour des raisons de clarté et cela évite de dupliquer des scripts s'ils sont utilisés dans plusieurs niveaux d'exécution. Comme chaque script peut être exécuté à la fois comme script de démarrage et d'arrêt, ils doivent savoir interpréter les paramètres start et stop. Les scripts reconnaissent aussi les options restart, reload, force-reload et status. Ces différentes options sont décrites dans Tableau 7.2, « Options possibles de scripts d'initialisation ». Les scripts qui sont exécutés directement par init n'ont pas ces liens. Ils sont exécutés indépendamment du niveau d'exécutions lorsqu'ils sont nécessaires.

Tableau 7.2. Options possibles de scripts d'initialisation

Option

Description

start

Démarre le service. Démarrer un service en fonctionnement réussira aussi sans rien faire.

stop

Arrête le service.

restart

Arrête le service et le redémarre s'il tourne. Dans le cas contraire, le démarre.

reload

Recharge la configuration sans arrêter ni redémarrer le service.

force-reload

Recharge la configuration si le service le permet. Dans le cas contraire, agit de la même manière que si restart avait été indiqué.

status

Affiche l'état actuel du service.

Les liens présents dans chaque sous-répertoire associé à un niveau d'exécution permettent d'associer des scripts à différents niveaux d'exécution. Lors de l'installation ou de la désinstallation des paquetages, ces liens sont ajouté et supprimés à l'aide du programme insserv (ou avec /usr/lib/lsb/install_initd, un script appelant ce programme). Consultez la page de manuel insserv(8) pour les détails. Vous trouverez ci-après une brève présentation des scripts d'amorçage et d'arrêt lancés en premier ou dernier lieu, respectivement, suivie d'une description du script de maintenance.

boot

Exécuté lors du démarrage direct du système à l'aide d'init. Il est indépendant du niveau d'exécution choisi et n'est exécuté qu'une fois. Ici; les systèmes de fichiers proc et pts sont montés et blogd (en anglais, Boot Logging Daemon) est activé. Si le système est amorcé pour la première fois après une mise à jour et une installation, la configuration système initiale est démarrée.

Le démon blogd est un service démarré par les scripts boot et rc avant tout autre. Il est arrêté une fois que les actions déclenchées par les scrips ci-dessus (exécutant un certain nombre de sous-scripts, par exemple) sont achevées. blogd écrit toute sortie écran sur le fichier journal /var/log/boot.msg, mais seulement si et quand /var est monté en lecture-écriture. Sinon, blogd met en mémoire tampon toutes les données à l'écran jusqu'à ce que /var devienne disponible. Vous trouverez plus d'informations au sujet de blogd sur la page de manuel de blogd(8).

Le script boot est également chargé de démarrer tous les scripts de /etc/init.d/boot.d dont le nom commence par S. Les systèmes de fichiers y sont vérifiés et les périphériques de bouclage (loop device) configuré si besoin est. L'horloge système est également réglée. Si une erreur survient lors de la vérification et de la réparation automatiques du système de fichiers, l'administrateur système peut intervenir après la saisir du mot de passe de root. Le dernier script exécuté est boot.local.

boot.local

Saisissez ici des commandes additionnelles pour effectuer un amorçage avant de changer de niveau d'exécution. On peut comparer ce script à AUTOEXEC.BAT sur les systèmes DOS.

boot.setup

Le script est exécuté lors du passage du mode mono-utilisateur à tout autre niveau d'exécution. Il est chargé d'une certain nombre de réglages de base, tels que la disposition du clavier et l'initialisation des consoles virtuelles.

halt

Ce script n'est exécuté que lors du passage au niveau d'exécution 0 ou 6. Ici, il est exécuté soit en tant que halt, soit en tant que reboot. La manière dont le système s'arrête ou redémarre dépend de la manière dont halt est appelé.

rc

Ce script appelle les scripts d'arrêt appropriés du niveau d'exécution actuel et les scripts de démarrage du niveau d'exécution qui vient d'être choisi.

7.5.1. Ajouter des scripts d'initialisation

Vous pouvez créer vos propres scripts et les intégrer aisément dans la disposition décrite ci-dessus. Pour des instructions concernant le la mise en forme, le nommage et l'organisation de scripts personnalisés, reportez-vous aux spécifications du LSB ainsi qu'aux pages de manuel init(8), init.d(7) et insserv(8). Consultez en outre les pages de manuel startproc(8) et killproc(8).

[Warning]Créer vos propres scripts d'initialisation

Des scripts d'initialisation erronés peuvent geler votre machine. Soyez très prudent lorsque vous modifiez ce type de scripts et, dans la mesure du possible, soumettez-les à un test complet dans l'environnement multi-utilisateur. Vous trouverez des informations utiles sur les scripts d'initialisation dans Section 7.3, « Les niveaux d'exécution ».

Pour créer un script d'initialisation personnalisé pour un programme ou un service donnés, utilisez le fichier /etc/init.d/skeleton comme modèle. Enregistrez une copie de ce fichier sous le nouveau nom et modifiez le programme ainsi que les noms de fichiers, chemins d'accès et tout autre détail pertinent comme nécessaire. Il se peut que vous soyez amené à améliorer le script avec vos propres éléments, de façon à ce que la procédure d'initialisation déclenche les actions correctes.

Le bloc INIT INFO, au début du fichier, est un élément obligatoire du script et devra être modifié. Voir Exemple 7.1, « Un bloc INIT INFO minimal ».

Exemple 7.1. Un bloc INIT INFO minimal

### BEGIN INIT INFO
# Provides:          TOTO
# Required-Start:    $syslog $remote_fs
# Required-Stop:     $syslog $remote_fs
# Default-Start:     3 5
# Default-Stop:      0 1 2 6
# Description:       Démarre TOTO pour autoriser XY et fournir YZ
### END INIT INFO
    

Dans la première ligne du bloc INFO, après Provides:, indiquez le nom du programme ou du service que ce script d'initialisation a sous son contrôle. Dans les lignes Required-Start: et Required-Stop:, précisez tous les services qui doivent être démarrés ou arrêtés avant que le service lui-même ne soit démarré ou arrêté. Ces informations servent par la suite à générer la numérotation des noms de scripts, comme on les trouve dans les répertoires des niveaux d'exécution. Sous Default-Start: et Default-Stop:, indiquez les niveaux d'exécution dans lesquels le service devra être automatiquement démarré ou arrêté. Pour finir, sous Description:, prévoyez une courte description du service en question.

Pour créer des liens à partir des répertoires des niveaux d'exécution (/etc/init.d/rc?.d/) vers les scripts correspondants dans /etc/init.d/, saisissez la commande insserv <nouveau-nom-script>. Le programme insserv évalue l'en-tête INIT INFO pour créer les liens nécessaires pour les scripts de démarrage et d'arrêt dans les répertoires des niveaux d'exécution (/etc/init.d/rc?.d/). Le programme veille également à l'ordre correct de démarrage et d'arrêt de chaque niveau d'exécution en ajoutant les nombres nécessaires dans les noms de ces liens. Si vous préférez créer de tels liens avec un outil graphique, faites appel à l'éditeur de niveaux d'exécution que fournit YaST, comme décrit dans Section 7.6, « Éditeur de niveaux d'exécution ».

Si un script déjà présent dans /etc/init.d/ doit être intégré dans la disposition existante des niveaux d'exécution, créez les liens dans les répertoires des niveaux d'exécution immédiatement avec insserv ou en activant le service correspondant dans l'éditeur de niveaux d'exécution de YaST. Vos changements seront appliqués lors du prochain redémarrage — le nouveau service sera démarré automatiquement.

Ne définissez pas ces liens manuellement. S'il y a une erreur dans le bloc INFO, des problèmes surgiront lorsque, plus tard, insserv sera exécuté pour un autre service.


SUSE LINUX Guide de l'administrateur 9.2