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


230

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

Più in generale, quale significato .dtrasmette il suffisso a una directory?

Risposte:


229

/etc/init.dcontiene gli script utilizzati dagli strumenti di inizializzazione di System V (SysVinit). Questo è il tradizionale pacchetto di gestione dei servizi per Linux, che contiene il initprogramma (il primo processo che viene eseguito al termine dell'inizializzazione del kernel¹) nonché un'infrastruttura per avviare e arrestare i servizi e configurarli. Specificamente, i file in /etc/init.dsono script shell che rispondono a start, stop, restart, e (quando supportato) reloadcomanda di gestire un particolare servizio. Questi script possono essere richiamati direttamente o (più comunemente) tramite qualche altro trigger (in genere la presenza di un collegamento simbolico /etc/rc?.d/).

/etc/initcontiene i file di configurazione utilizzati da Upstart. Upstart è un giovane pacchetto di gestione dei servizi sostenuto da Ubuntu. I file in /etc/initsono file di configurazione che raccontano Upstart come e quando start, stop, reloadla configurazione, o interrogare il statusdi un servizio. A partire da lucido, Ubuntu sta passando da SysVinit a Upstart, il che spiega perché molti servizi vengono forniti con gli script SysVinit anche se si preferiscono i file di configurazione di Upstart. In effetti, gli script SysVinit sono elaborati da un livello di compatibilità in Upstart.

.dnei nomi di directory in genere indica una directory contenente molti file di configurazione o script per una situazione particolare (ad esempio, /etc/apt/sources.list.dcontiene i file che sono concatenati per fare un virtuale sources.list; /etc/network/if-up.dcontiene gli script che vengono eseguiti quando una rete i nter f asso è attivato). Questa struttura viene solitamente utilizzata quando ogni voce nella directory è fornita da una fonte diversa, in modo che ogni pacchetto possa depositare il proprio plug-in senza dover analizzare un singolo file di configurazione per fare riferimento a se stesso. In questo caso, succede semplicemente che "init" è un nome logico per la directory, SysVinit è arrivato per primo e usato init.d, e Upstart ha usato semplicementeinitper una directory con uno scopo simile (sarebbe stato più "mainstream", e forse meno arrogante, se avessero usato /etc/upstart.dinvece).

¹ senza contare initrd


28
nota storica esoterica: le .ddirectory sono entrate con System V. Era una notazione sconcertante e alla fine probabilmente l'idea di una persona che è entrata nella base di codice e non poteva andarsene. Ad esempio, se ritieni che catsia un brutto nome per l'attività che esegue, immagina quanti file in tutto il sistema dovresti toccare per cambiarlo.
msw,

Sui sistemi che hanno entrambe le directory, quale di Upstart e SysVinit viene utilizzata? C'è un modo per controllare?
asheeshr,

3
@AsheeshR Verifica se esiste un pacchetto chiamato upstarto sysvinit. E nelle ultime versioni, potrebbe anche essere systemd(che non esisteva per Ubuntu quando ho scritto la mia risposta). È il pacchetto che fornisce /sbin/init( dpkg -S /sbin/init).
Gilles,

Nell'istanza AWS Ubuntu che sto usando (da Bitnami), è il upstartpacchetto che fornisce / sbin / init (eseguito dpkg -S /sbin/init). Ma Bitnami ha inserito il suo script nella directory /etc/init.d. Questo non è forse in conflitto con la tua risposta a @AsheeshR sopra? Grazie.
Sabuncu,

@Sabuncu Questo è un esempio di "Gli script SysVinit sono elaborati da un livello di compatibilità in Upstart".
Gilles,

29

".D" viene in genere aggiunto a un nome di directory per indicare che ciò che era (o che cosa avrebbe potuto essere) gestito da un singolo script o un singolo file di configurazione è stato diviso in più file per motivi di praticità, ma che dovrebbe essere incluso o eseguito insieme.

Ad esempio, /etc/apache/conf.d/oppure/etc/apt/sources.d/

Nei casi in cui è importante quale ordine debbano essere inclusi / eseguiti, i file in queste directory a volte iniziano con un numero, come "00-default" o "80-utente" in modo che vengano eseguiti nell'ordine giusto.

In questo caso /etc/init.d/indica che gli script in "init.d" devono essere eseguiti tutti. Al giorno d'oggi, tuttavia, il sistema init dei moderni sistemi operativi è un po 'più coinvolto di così, ma il nome della directory è ancora lì.


Forse il .dmezzo è correlato a un processo 'deamon' che normalmente viene avviato al momento dell'avvio.

21
.d è sicuramente per directory, non per demone.
Martin,

13

Come fai notare, la nomenclatura ".d" è sconcertante e strana, e non ha davvero alcun posto in nessun sistema moderno - noterai che la maggior parte dei servizi moderni tende a lasciarla cadere.

Il motivo per cui la directory è /etc/inite non /etc/upstartè perché Upstart è il nome del progetto, l'attuale binario installato è ancora /sbin/initquindi non avrebbe senso per la sua configurazione avere un nome che non corrispondesse al binario.


7
Questo è sbagliato, vedi ad esempio udev rules.d, Xorg è relativamente recente xorg.conf.d, non troppo vecchio /etc/profile.decc.
Ruslan,
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.