web-dev-qa-db-fra.com

Quelle est la différence entre /etc/rc.local et /etc/init.d/rc.local?

Je veux ajouter une règle iptables permanente à ma nouvelle VPS, et après une brève recherche sur Google, j'ai été surpris qu'il y ait deux endroits où cette règle peut être ajoutée, qui semble identique: /etc/rc.local et /etc/init.d/rc.local. Peut-être que quelqu'un sait pourquoi il y a deux endroits pour placer un code de démarrage simple? Est-il spécifique à la saveur Linux (mais Ubuntu a les deux!)? Ou l'un d'eux est obsolète?

30
grigoryvp

/etc/init.d Est maintenu sur ubuntu pour une compatibilité ascendante avec les choses sysvinit. Si vous regardez réellement /etc/init.d/rc.local, Vous verrez (également à partir d'un serveur 12.04 LTS):

#! /bin/sh
### BEGIN INIT INFORMATION
# Provides:          rc.local
# Required-Start:    $remote_fs $syslog $all
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: Run /etc/rc.local if it exist
### END INIT INFO

Et "Exécuter /etc/rc.local" est exactement ce qu'il fait. L'intégralité de /etc/rc.local Est:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

exit 0

J'imagine que le but en faisant cela est de fournir un endroit simple et mort pour mettre les commandes Shell que vous souhaitez exécuter au démarrage, sans avoir à gérer le service stop | start, qui est dans /etc/init.d/rc.local.

Il s'agit donc en fait d'un service, et peut être exécuté en tant que tel. J'ai ajouté une ligne echo à /etc/rc.local Et:

»service rc.local start
hello world

Cependant, je ne crois pas qu'il soit référencé par quoi que ce soit dans le répertoire /etc/init (Pas init.d!) De upstart:

»initctl start rc.local
initctl: Unknown job: rc.local

Il y a quelques services "rc" dans upstart:

»initctl list | grep rc
rc stop/waiting
rcS stop/waiting
rc-sysinit stop/waiting

Mais aucun de ceux-ci ne semble avoir quoi que ce soit à voir avec rc.local.

32
goldilocks

C'est plus une chose spécifique à la distribution. (comme, vous ne trouverez pas différents rc.local dans CentOS).

Pour en venir maintenant à votre question, je pense que l'ajout de quoi que ce soit dans /etc/init.d/rc.local permet de démarrer en tant que "service" alors que tout ce qui se trouve dans /etc/rc.local lancerait simplement ce script au démarrage.

Je ne sais pas vraiment pourquoi Ubuntu maintient toujours les deux? (Peut-être que quelqu'un d'autre pourrait faire la lumière sur cette partie !!)

5
pragmatic