La commande insserv est utilisée pour contrôler l'ordre de démarrage et d'arrêt des services qui se trouvent sur un système Linux.
Il active un script d'initialisation système installé (script de démarrage) en lisant l'en-tête de commentaire du script d'initialisation et en calculant les dépendances entre tous les scripts.
Insserv recherche les fonctionnalités du système dans le fichier de configuration /etc/insserv.conf et le répertoire /etc/insserv.conf.d.
1. Format d'en-tête de script init.d
Tous les scripts sous le répertoire /etc/init.d doivent avoir un en-tête comme ci-dessous. Même si les lignes sont commentées (comme ci-dessous) dans la section d'en-tête de chaque script, insserv devrait toujours pouvoir lire toutes ces lignes et activer tous les scripts d'initialisation en conséquence.
Dans l'exemple suivant, la ligne commençant par "# Required-Start:$local_fs boot.localnet" permet à l'insserv d'exécuter/vérifier le script $local_fs et les scripts boot.localnet ensuite avant que le script boot.kdump puisse être exécuté.
De la même manière, les lignes "# Required-Stop:$local_fs boot.localnet" permettent à insserv d'arrêter les services avant l'exécution de ce script.
Si vous débutez avec les scripts d'initialisation, vous devez comprendre comment vous pouvez écrire des scripts d'initialisation personnalisés basés sur LSB Init Standard.
# cat boot.kdump #!/bin/bash # # Copyright 2005 Red Hat, Inc. # Author: Jeff Moyer <[email protected]> ### BEGIN INIT INFO # Provides: boot.kdump # Required-Start: $local_fs boot.localnet # Should-Start: # Should-Stop: # Required-Stop: $local_fs boot.localnet # Default-Start: B # Default-Stop: # Short-Description: kdump boot configuration # Description: This script loads the kdump kernel on startup. ### END INIT INFO . /etc/sysconfig/kdump . /etc/rc.status
2. Format de fichier insserv.conf
Voici un exemple de /etc/insserv.conf, qui est le fichier de configuration utilisé par la commande insserv.
# cat /etc/insserv.conf # All local filesystems are mounted (done during boot phase) $local_fs boot.localfs +boot.crypto # Low level networking (ethernet card) $network network # Named is operational $named +named +dnsmasq +lwresd $network # All remote filesystems are mounted (note in some cases /usr may # be remote. Most applications that care will probably require # both $local_fs and $remote_fs) $remote_fs $local_fs +nfs +smbfs # System logger is operational $syslog syslog # SunRPC portmapper available $portmap portmap # The system time has been set correctly $time boot.clock +xntpd # Services which need to be interactive <interactive> apache apache2 boot.clock boot.crypto boot.crypto-early boot.localfs boot.rootfsck kbd kdump ntp
Dans le fichier de configuration ci-dessus :
- $network est un pseudo nom faisant référence au script /etc/init.d/network.
- De même, vous verrez le pseudo de chaque script dans /etc/insserv.conf. Ce sont les pseudo-noms qui seront utilisés dans la section d'en-tête du script de démarrage.
- Chaque ligne qui commence par $ et un nom suivant définit une installation système conformément à la spécification de base standard Linux (LSB)
- Tous les noms suivis d'une telle installation système déclareront les dépendances requises de l'installation.
- Si le service dont le nom suit le signe plus est disponible, il sera utilisé. S'il n'est pas disponible, il est ignoré en silence.
- Les mots commençant par
sont des mots clés. - Actuellement,
est le seul mot clé connu pour marquer un service comme interactif, par ex. un service qui nécessite une phrase secrète ou un mot de passe lors du démarrage ou du changement de niveau d'exécution.
3. Ajouter un service
Voici un exemple sur la façon d'ajouter un service simple à l'aide de l'utilitaire insserv.
Tout d'abord, vérifiez que le fichier exécutable se trouve dans le répertoire /etc/init.d.
# ls -l /etc/init.d/joystick -rwxr-xr-x 1 root root 2296 May 5 2010 /etc/init.d/joystick
Ensuite, exécutez la commande insserv pour activer le service joystick.
# insserv joystick
Après la commande insserv ci-dessus, exécutez chkconfig pour vérifier qu'elle est ajoutée à la liste de démarrage.
# chkconfig --list | grep joystick joystick 0:off 1:off 2:on 3:on 4:off 5:on 6:off
Veuillez noter que ce qui précède est un exemple très simple sans dépendances. Mais la puissance d'insserv réside dans le fait qu'il résoudra et ajoutera automatiquement tous les scripts dépendants appropriés.
4. Effectuer un test de fonctionnement
Pour effectuer une simulation sans activer aucun des services, utilisez l'indicateur -n comme indiqué ci-dessous.
# insserv –n insserv: Loading ypserv insserv: Loading /etc/insserv/overrides/ypserv insserv: Loading network insserv: Loading /etc/insserv/overrides/network insserv: Loading aaeventd insserv: Loading /etc/insserv/overrides/aaeventd insserv: Loading ntp insserv: Loading hawk insserv: Loading /etc/insserv/overrides/hawk insserv: Loading fetchmail insserv: Loading /etc/insserv/overrides/fetchmail insserv: Loading boot.cycle insserv: Loading /etc/insserv/overrides/boot.cycle insserv: Loading autoyast .. ..
5. Supprimer un service
Utilisez l'option -r comme indiqué ci-dessous pour supprimer un service.
# insserv -r joystick
Après avoir supprimé un service, vous ne le verrez plus dans la sortie de chkconfig.
# chkconfig --list | grep joystick
6. Utiliser le niveau d'exécution par défaut
Pour utiliser les niveaux d'exécution par défaut définis dans les scripts, utilisez l'option -d. Si vous avez modifié un schéma de liens de niveau d'exécution, cela peut restaurer ces modifications.
# insserv –d
Pour utiliser les niveaux d'exécution par défaut définis dans les scripts, utilisez l'option –d. Dans l'exemple suivant, insserv utilisera le niveau d'exécution défini dans le script au lieu d'exécuter le script à partir du niveau d'exécution défini par le système ou l'utilisateur.
# insserv –d <script name> # insserv -d /etc/init.d/lighttpd # chkconfig --list | grep lighttpd lighttpd 0:off 1:off 2:off 3:on 4:off 5:on 6:off
7. Forcer l'exécution du service
Pour forcer l'exécution en ignorant le service requis, utilisez l'option -f comme indiqué ci-dessous.
# insserv –f
Pour forcer le système à ignorer les autres services requis ou les scripts dépendants, utilisez l'option –f. Dans l'exemple suivant, pour que le script /etc/init.d/openhpid soit exécuté, d'autres dépendances telles que les services réseau, distants et syslog doivent être démarrées en premier.
# more /etc/init.d/openhpid #! /bin/sh # ### BEGIN INIT INFO # Provides: openhpid # Required-Start: $network $remote_fs $syslog # Required-Stop: $network $remote_fs $syslog # Should-Start: $named # Should-Stop: $named # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start OpenHPI daemon at boot time # Description: Enable OpenHPI service which is provided by openhpid. ### END INIT INFO
Vous pouvez forcer le système à exécuter le script /etc/init.d/openhpid en ignorant l'état des services réseau, distants et syslog en utilisant la commande insserv comme indiqué ci-dessous :
# insserv -f /etc/init.d/openhpid
En outre, vous pouvez utiliser l'option -v avec l'une des sorties ci-dessus pour voir plus de détails sur ce que fait la commande.
# insserv –dv
8. Modifier le répertoire des scripts
Comme vous le voyez dans tous les exemples précédents, le script est placé sous le répertoire /etc/init.d par défaut. Si vous souhaitez que insserv utilise un répertoire différent pour le script, utilisez l'option -p.
Par exemple, ce qui suit utilisera le répertoire /etc/init.d.custom comme emplacement du script.
# insserv –p /etc/init.d.cusom
9. Fichier de configuration personnalisé Insserv
Pour spécifier le chemin du fichier de configuration, utilisez l'option -c. Ceci est utilisé à la fois pour le fichier insserv.conf et le répertoire insserv.conf.d.
# insserv –c <config file>
Supposons, par exemple, que vous souhaitiez utiliser un chemin différent pour le fichier de configuration au lieu de /etc/insserv.conf, vous pouvez alors utiliser la commande comme indiqué dans l'exemple suivant.
Ceci est très utile lorsque vous souhaitez apporter des modifications au fichier /etc/insserv.conf et exécuter une procédure de simulation (-n) à des fins de validation. Sauvegardez le fichier d'origine, modifiez-le avec les modifications dont vous avez besoin, puis pointez vers le nouvel emplacement.
Une fois que vous avez terminé tous vos tests, vous pouvez exécuter la même commande pour revenir au fichier de configuration d'origine ou utiliser le nouvel emplacement.
# insserv -c /var/tmp/insserv_karthik.conf
10. Insserv Override et fichiers associés
Pour remplacer le chemin pour remplacer /etc/insserv/overrides, veuillez utiliser l'option suivante.
Par défaut, les en-têtes de commentaires LSB trouvés sous le répertoire par défaut /etc/insserv/overrides remplaceront les en-têtes de commentaires LSB pour les scripts trouvés sous le répertoire /etc/init.d.
Mais, si vous souhaitez spécifier votre propre répertoire de remplacement, utilisez l'option -o. Ce qui suit définit /etc/insserv/my.overrides comme répertoire de remplacement.
# insserv –o /etc/insserv/my.overrides
Afin de remplacer ou de remplacer les en-têtes de commentaires LSB par les nouveaux commentaires, vous pouvez créer un fichier avec les nouveaux en-têtes dans le chemin spécifique et demander à insserv de rechercher un nouveau fichier au lieu de rechercher les commentaires définis dans le script d'origine.
Dans l'exemple suivant, /etc/init.d/splash est un script qui a les commentaires LSB ci-dessous, ces commentaires sont utilisés pour déterminer quels services doivent être démarrés ou arrêtés en premier.
# more /etc/init.d/splash #! /bin/bash # Copyright (c) 1995-2000 SuSE GmbH Nuernberg, Germany. # # Author: Michael Schroeder <[email protected]> # # /etc/init.d/splash # /usr/sbin/rcsplash # # System startup script for console splash screens # ### BEGIN INIT INFO # Provides: splash # Required-Start: $remote_fs # Should-Start: fbset # Required-Stop: $remote_fs # Should-Stop: fbset # Default-Start: 1 2 3 5 S # Default-Stop: # Description: Splash screen setup ### END INIT INFO
Si vous ne souhaitez pas utiliser les commentaires LSB ci-dessus et ne souhaitez pas non plus modifier le script existant, vous pouvez copier le fichier dans le répertoire /etc/insserv/overrides et exécuter la commande insserv ci-dessous pour indiquer au système d'utiliser le script défini. dans le répertoire override,
insserv -o splash
Vous n'avez pas besoin de spécifier l'emplacement du répertoire de remplacement car le chemin par défaut est /etc/insserv/overrides. Vous pouvez également exécuter insserv dry-run (-n) pour vérifier comment le script est exécuté.
Voici les différents fichiers qui seront traités par la commande insserv :
- /etc/insserv.conf - Fichier de configuration pour insserv qui définit les installations du système LSB.
- /etc/insserv.conf.d/ – Répertoire pour d'autres fichiers de configuration pour déclarer les installations du système LSB.
- /etc/insserv/overrides/ – Chemin pour remplacer les en-têtes de commentaires LSB existants par les en-têtes de commentaires trouvés dans ce chemin.
- /etc/init.d/ – Chemin d'accès au répertoire de base du script d'initialisation de SuSE, comme requis par la spécification de base standard Linux (LSB)