GNU/Linux >> Tutoriels Linux >  >> Linux

Comprendre les scripts rc sous Linux

Le script rc

Quand init entre dans un niveau d'exécution, il appelle le script rc avec un argument numérique spécifiant le niveau d'exécution auquel aller. rc démarre et arrête ensuite les services sur le système selon les besoins pour amener le système à ce niveau d'exécution. Bien qu'il soit généralement appelé au démarrage, le script rc peut être appelé par init pour modifier les niveaux d'exécution. Par exemple, les éléments suivants peuvent être utilisés pour faire passer le système au niveau d'exécution 3 :

# init 3

Lors du passage au niveau d'exécution 3, rc amène le système dans le nouveau niveau d'exécution en arrêtant tous les services qui ne sont pas censés s'exécuter au niveau d'exécution 3 et en démarrant tous les services qui s'exécutent au niveau d'exécution 3 qui ne sont pas déjà en cours d'exécution.

Vous trouverez tous les scripts d'initialisation du système dans /etc/rc.d. Ce sous-répertoire a plusieurs sous-répertoires, un pour chaque niveau d'exécution :rc0.d–rc6.d et init.d . Dans les sous-répertoires /etc/rc.d/rc#.d (où le # est remplacé par un nombre à un chiffre) se trouvent des liens symboliques vers les scripts maîtres stockés dans /etc/rc.d/init.d.

# ls -lrt /etc/rc.d
total 60
-rwxr-xr-x  1 root root   889 Jan 29  2015 rc.local
-rwxr-xr-x  1 root root 20199 Oct  4  2017 rc.sysinit
-rwxr-xr-x  1 root root  2617 Oct  4  2017 rc
drwxr-xr-x. 2 root root  4096 Mar 20 16:49 init.d
drwxr-xr-x. 2 root root  4096 Mar 20 16:49 rc1.d
drwxr-xr-x. 2 root root  4096 Mar 20 16:49 rc0.d
drwxr-xr-x. 2 root root  4096 Mar 20 16:49 rc6.d
drwxr-xr-x. 2 root root  4096 Mar 20 16:54 rc4.d
drwxr-xr-x. 2 root root  4096 Mar 20 16:54 rc3.d
drwxr-xr-x. 2 root root  4096 Mar 20 16:54 rc2.d
drwxr-xr-x. 2 root root  4096 Mar 20 16:54 rc5.d

Les scripts dans init.d prennent un argument de démarrage ou d'arrêt, et occasionnellement de rechargement ou de redémarrage.

Mise en œuvre du niveau d'exécution

Les niveaux d'exécution sont implémentés sous forme de répertoires sur le système qui contiennent des scripts shell pour démarrer et arrêter des démons spécifiques, par ex. /etc/rc1.d/. La plupart des systèmes ont des répertoires pour les niveaux d'exécution 0-6.

Les scripts de chaque répertoire sont nommés soit avec un S majuscule , ou un K majuscule , suivi d'un nombre à deux chiffres, suivi du nom du service référencé. Les fichiers commençant par un S majuscule représentent des scripts qui sont démarrés lors de l'entrée dans ce niveau d'exécution, tandis que les fichiers commençant par un K majuscule représentent des scripts qui sont arrêtés. Les nombres spécifient l'ordre dans lequel les scripts doivent être exécutés.

Par exemple, un démon peut avoir un script nommé S35daemon dans rc3.d/, et un script nommé K65daemon pour l'arrêter dans rc2.d/. Le fait d'avoir les nombres au début du nom de fichier les fait trier et traiter dans l'ordre souhaité.

/etc/rc

Lorsque le programme /etc/rc est appelé par init pour modifier les niveaux d'exécution, il le fait en accédant au répertoire du niveau d'exécution cible et parcourt tous les fichiers de script K## pour arrêter les services en cours d'exécution qui ne devraient pas se trouver dans le niveau d'exécution cible. et les fichiers de script S## pour les services qui devraient être, mais ne sont pas actuellement, exécutés dans le niveau d'exécution cible.

En raison de la façon dont le programme /etc/rc fonctionne sous Linux, les répertoires individuels /etc/rc#.d/ n'auront qu'un lien symbolique S##script ou K##script pour chaque service. Il y aura également un lien symbolique pour chaque service dans chacun des sept répertoires /etc/rc#.d/. À l'exception du fichier S99local (lien symbolique vers ../rc.local), qui n'apparaît que dans /etc/rc1.d/ à /etc/rc5.d/ et n'a pas de lien symbolique kill correspondant, il devrait toujours y avoir le même nombre de fichiers dans chacun des répertoires de niveau d'exécution.

Ordre des dépendances au démarrage

Il est important que les scripts démarrent et s'arrêtent dans le bon ordre. Par exemple, pour que NFS et NIS fonctionnent correctement, le démon RPC portmapper rpcbind doit être démarré en premier.

/etc/init.d/

Pour éviter la duplication des scripts, les fichiers des répertoires rc#.d/ sont en fait des liens symboliques vers les fichiers de script situés dans le répertoire /etc/init.d/. Chaque service installé sur le système installe un script dans ce répertoire qui peut être utilisé pour contrôler ce service. Ces scripts sont écrits pour prendre des options de démarrage spécifiant qu'ils doivent démarrer le service et des options d'arrêt spécifiant qu'ils doivent arrêter le service.

Compatibilité des niveaux d'exécution Upstart et SysV

Étant donné qu'Upstart n'a aucune notion interne de niveaux d'exécution, leur prise en charge est définie par le fichier /etc/init/rc.conf. Cette prise en charge existe pour fournir une rétrocompatibilité pour la spécification Unix unique et les implémentations précédentes de SysV Init.

/etc/rc.local

Des scripts personnalisés pour effectuer des tâches sur le système peuvent être créés dans le répertoire /etc/init.d/ , puis des liens symboliques vers ces scripts peuvent être créés dans les répertoires /etc/rc#.d/ pour démarrer ou arrêter les scripts comme nécessaire. Pour certaines tâches, cependant, la création de scripts d'initialisation complets de style System V, avec des options de démarrage et d'arrêt, est exagérée; certaines tâches, par exemple, doivent être exécutées une fois lorsque le système démarre, mais n'ont jamais besoin d'être tuées, ou n'ont pas besoin d'être exécutées à chaque fois que le système change de niveau d'exécution, ou pour d'autres raisons, ne peuvent pas être exécutées à partir d'un Script d'initialisation du système V.


Linux
  1. Quel est le niveau d'exécution actuel du système Linux ?

  2. Linux - Comment changer le mot de passe root oublié ?

  3. Linux - La barre oblique (/) fait-elle partie du nom du répertoire racine Linux ?

  4. Comprendre les politiques SELinux sous Linux

  5. Comprendre le fichier /etc/inittab sous Linux

Comprendre les niveaux d'exécution Linux de la bonne façon

Comprendre la boucle for dans les scripts shell

Comment changer le mot de passe root sous Linux

Comprendre la commande time sous Linux

Comprendre le fichier /etc/fstab sous Linux

Comment changer le mot de passe du compte racine du VPS Linux