Qual é a diferença entre /etc/rc.local e /etc/init.d/rc.local?

30

Quero adicionar uma regra iptables permanente ao meu novo VPS e, após uma breve pesquisa no Google, fiquei surpreso ao saber que há dois lugares em que essa regra pode ser adicionada, que parece idêntica: /etc/rc.local e /etc/init.d/rc.local . Talvez alguém saiba por que onde dois locais para código de inicialização simples são colocados? É o sabor do linux específico (mas o Ubuntu tem os dois!)? Ou um deles está obsoleto?

    
por grigoryvp 31.12.2012 / 11:57

2 respostas

31

/etc/init.d é mantido no Ubuntu para compatibilidade com o sysvinit. Se você realmente olhar para /etc/initd/rc.local você verá (também de um 12.04 LTS Server):

#! /bin/sh
### BEGIN INIT INFO
# 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

E "Executar /etc/rc.local" é exatamente o que faz. A totalidade de /etc/rc.local é:

#!/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

Eu acho que o propósito de fazer isso é fornecer um lugar morto simples para colocar os comandos do shell que você quer executar na inicialização, sem ter que lidar com o material do serviço stop | start, que está em /etc/init.d/rc.local .

Então, na verdade, é um serviço e pode ser executado como tal. Adicionei uma linha echo a /etc/rc.local e:

»service rc.local start
hello world

No entanto, eu não acredito que seja referenciado por qualquer coisa no diretório /etc/init (não init.d!) do upstart:

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

Existem alguns serviços "rc" em upstart:

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

Mas nada disso parece ter nada a ver com rc.local.

    
por 31.12.2012 / 15:35
5

Isso é mais uma coisa específica da distribuição. (tipo, você não encontrará rc.local diferente no CentOS).

Agora chegando à sua pergunta, acho que adicionar qualquer coisa dentro do /etc/init.d/rc.local faz com que ele comece como um "serviço", enquanto qualquer coisa dentro do /etc/rc.local simplesmente lançaria esse script no tempo de inicialização.

Eu não tenho certeza do porque o Ubuntu ainda mantém os dois? (Talvez alguém possa lançar alguma luz sobre esta parte!)

    
por 31.12.2012 / 12:18