Il y a deux types de scripts dans
/etc/init.d :
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.
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 |
|---|---|
|
|
Démarre le service. Démarrer un service en fonctionnement réussira aussi sans rien faire. |
|
|
Arrête le service. |
|
|
Arrête le service et le redémarre s'il tourne. Dans le cas contraire, le démarre. |
|
|
Recharge la configuration sans arrêter ni redémarrer le service. |
|
|
Recharge la configuration si le service le permet. Dans le
cas contraire, agit de la même manière que si |
|
|
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.
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).
![]() | 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.