Qual è la differenza tra /etc/rc.local e /etc/init.d/rc.local?


30

Voglio aggiungere una iptablesregola permanente alla mia nuova VPS, e dopo una breve ricerca su Google sono rimasto sorpreso dal fatto che ci sono due posti in cui questa regola può essere aggiunta, che sembra identica: /etc/rc.locale /etc/init.d/rc.local. Forse qualcuno sa perché dove sono posizionati due posti per il semplice codice di avvio? È specifico per Linux (ma Ubuntu ha entrambi!)? O uno di questi è deprecato?


1
Uno dovrebbe essere un collegamento simbolico all'altro.
Ignacio Vazquez-Abrams,

2
@ IgnacioVazquez-Abrams Su Ubuntu Server 12.04 x86 LTS sono completamente diversi :(.
grigoryvp

1
@ IgnacioVazquez-Abrams: anche su Debian sembrano essere diversi.
Emanuel Berg,

3
Vale la pena dare un'occhiata: ho fatto una domanda su /etc/rc.localun po 'di tempo fa.
Emanuel Berg

Risposte:


31

/etc/init.dviene mantenuto su Ubuntu per la retrocompatibilità con roba sysvinit. Se guardi effettivamente /etc/init.d/rc.localvedrai (anche da un server LTS 12.04):

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

E "Esegui /etc/rc.local" è esattamente quello che fa. L'intero /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

Immagino che lo scopo di questo sia quello di fornire un posto semplice morto per mettere i comandi della shell che si desidera eseguire all'avvio, senza dover affrontare il servizio stop | start, che è in /etc/init.d/rc.local.

Quindi è in realtà un servizio e può essere eseguito come tale. Ho aggiunto una echoriga a /etc/rc.locale:

»service rc.local start
hello world

Tuttavia, non credo che faccia riferimento a qualcosa nella /etc/initdirectory di upstart (non init.d!):

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

Ci sono alcuni servizi "rc" in upstart:

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

Ma nessuno di questi sembra avere nulla a che fare con rc.local.


5

Questa è più una cosa specifica della distribuzione. (come, non troverai diversi rc.local in CentOS).

Ora arrivando alla tua vera domanda, penso che l'aggiunta di qualcosa all'interno di /etc/init.d/rc.local lo faccia iniziare come un "servizio", mentre qualsiasi cosa all'interno di /etc/rc.local lancerebbe semplicemente quello script all'avvio.

Non sono davvero sicuro del motivo per cui Ubuntu mantiene ancora entrambi? (Forse qualcun altro potrebbe far luce su questa parte !!)


Qual è la differenza tra il comando che viene eseguito "come servizio" e un codice che viene "semplicemente avviato all'avvio"? È un po 'di sicurezza o cosa?
grigoryvp,

La differenza fondamentale tra i due è essenzialmente un servizio e un processo. ;) Immagino che l'intento di base sarebbe solo la sicurezza. Potresti trovare questo link interessante: unixmen.com/managing-your-services-and-processes-in-linux
pragmatic

Questo non è corretto! Non sono la stessa sceneggiatura, ma sono un servizio - /etc/init.d/rc.locallo stop inizia /etc/rc.local(vedi la mia risposta per maggiori dettagli).
Riccioli d'oro

@goldilocks: Grazie per una risposta molto descrittiva e approfondita, ma non sono chiaro quale parte della mia risposta hai definito errata? Dire uno come servizio significa che può fare le cose "start" e "stop", mentre l'altro semplicemente come un processo. Per favore, correggimi se non ho senso qui.
pragmatico

2
@pragmatic Poiché lo /etc/rc.localscript è il processo eseguibile governato dallo /etc/initd/rc.localscript, proprio come (ad esempio) /bin/syslogsarebbe il processo eseguibile governato da /etc/initd/syslog. Dici esplicitamente che si /etc/rc.localtratta solo di uno script di avvio, anziché /etc/initd/rc.localessere un servizio a livello di esecuzione completamente separato.
Riccioli d'oro
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.