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?
/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.
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 !!)