web-dev-qa-db-fra.com

Objectif et utilisation typique de /etc/rc.local

L'en-tête ressemble à ceci:

#!/bin/sh -e
#
# rc.local - executed at the end of each multiuser runlevel
#
# Make sure that the script will "exit 0" on success or any other
# value on error.

Quelle est la raison de ce fichier (il ne contient pas grand-chose) et quelles commandes y mettez-vous habituellement? Qu'est-ce qu'un "niveau d'exécution multi-utilisateur"? (Je suppose que rc est "exécuter des commandes"?)

79
Emanuel Berg

Un niveau d'exécution est un état du système, indiquant s'il est en cours de démarrage ou de redémarrage ou d'arrêt, ou en mode mono-utilisateur, ou s'il fonctionne normalement. Le programme traditionnel init gère ces actions en passant au niveau d'exécution correspondant. Sous Linux, les niveaux d'exécution sont par convention :

  • S lors du démarrage,
  • 0 lors de l'arrêt,
  • 6 lors du redémarrage,
  • 1 en mode mono-utilisateur et
  • 2 à 5 en fonctionnement normal.

Les niveaux d'exécution 2 à 5 sont connus sous le nom de niveaux d'exécution multi-utilisateurs car ils permettent à plusieurs utilisateurs de se connecter, contrairement au niveau d'exécution 1 qui est destiné uniquement à l'administrateur système.

Lorsque le niveau d'exécution change, init s'exécute scripts rc (sur les systèmes avec un init traditionnel - il existe des alternatives, telles que pstart et Systemd ). Ces scripts rc démarrent et arrêtent généralement les services système et sont fournis par la distribution.

Le scénario /etc/rc.local est destiné à l'administrateur système. Il est traditionnellement exécuté après le démarrage de tous les services système normaux, à la fin du processus de basculement vers un niveau d'exécution multi-utilisateur. Vous pouvez l'utiliser pour démarrer un service personnalisé, par exemple un serveur installé dans /usr/local. La plupart des installations n'ont pas besoin de /etc/rc.local, il est fourni pour la minorité des cas où il est nécessaire.

rc désigne "run-control",

Le niveau d'exécution multiuser serait défini comme le niveau auquel la mise en réseau est disponible et, par conséquent, des connexions au serveur pourraient être établies en utilisant ces services au lieu de connexions de console câblées.

Attention, les serveurs sont généralement gérés par un processeur de service (sous différents noms) qui prend en charge les connexions réseau et agit à son tour comme si vous aviez en effet une console câblée.

En ce qui concerne la rc.local, c'est une commodité pour vous permettre de spécifier tous les objets "locaux" (spécifiques au site) (démons et/ou scripts au démarrage) que vous souhaitez démarrer. Vous pouvez choisir d'utiliser ce paradigme ou de remplir de manière appropriée "/etc/init.d" avec des scripts de démarrage/d'arrêt.

14
JRFerguson

Je l'utilise principalement pour deux choses:

  1. pour enregistrer la date et la version du noyau de chaque redémarrage. un simple one-liner qui peut facilement être ajouté aux systèmes sans aucun bourrage autour ... et beaucoup moins sujet à l'historique de démarrage corrompu que l'exécution de uptimed.

  2. pour faire revivre l'ancien répertoire /etc/rc.boot/ qui était dans Debian jusqu'à il y a quelques années. J'ai encore quelques scripts simples qui ne valent pas la peine d'être réécrits en tant que script init.d (par exemple un script Q&D pour envoyer dmesg à la racine, et un autre pour utiliser hdaparm pour désactiver le spindown inactif et blockdev pour définir la lecture - taille anticipée), et je suis heureux qu'ils soient exécutés après tous les autres scripts de démarrage.

par exemple.

echo "$(date +%s),$(date),$(uname -a)"  >> /var/log/reboot.log

[ -d /etc/rc.boot ] && run-parts /etc/rc.boot

De plus, j'ai écrit des scripts /etc/rc.local plus tôt cette année pour les distributions centos et debian pour obtenir les métadonnées de style ec2 à partir d'Openstack (sur http://169.254.169.254/) afin que les machines virtuelles obtiennent leur adresse IP, nom d'hôte, clés ssh et autres informations spécifiques à l'instance. cloud-init a depuis été porté sur ces distributions, donc les scripts sont désormais obsolètes.

4
cas

Le rc.local fichier sur Debian est principalement destiné à la compatibilité avec les systèmes de style non init. Vous ne devez pas l'utiliser.

Au lieu de cela, il est recommandé de copier /etc/init.d/Skeleton vers un nouveau script d'initialisation pour tout ce que vous voulez faire lors de la modification des niveaux d'exécution, puis utilisez inserv pour l'activer.


Mise à jour: Selon le commentaire ci-dessous, cette réponse n'est plus recommandée. Cependant, cette réponse a été publiée plusieurs années avant la dépréciation du squelette, et ce squelette existe toujours dans Debian instable en janvier 2019.

3
bahamat