Le directory rc0.d, rc1.d, ... in / etc


30

Io corro Ubuntu dove ho le directory /etc/rc0.d, /etc/rc1.d, /etc/rc2.d, ..., /etc/rc6.d.

File di esempio dalla mia macchina:

directory      example symlinks in the dir
------------------------------------------
/etc/rc1.d:    K76dovecot, K77ntp
/etc/rc2.d:    S23ntp, S24dovecot
/etc/rc3.d:    S23ntp, S24dovecot
/etc/rc4.d:    S23ntp, S24dovecot
/etc/rc5.d:    S23ntp, S24dovecot

Domande:

  1. Qual è lo scopo delle directory multiple "rc"?
  2. Perché Ubuntu ha installato duplicati di dovecote ntpin tutte le directory tranne rc0.de rc6.d?
  3. Se vengono specificati più volte come sopra, vengono effettivamente eseguiti più volte?
  4. Puoi dire da quanto sopra in quale ordine dovecote ntpverrà eseguito all'avvio?
  5. Qual è il modo corretto di dire a Ubuntu di eseguire sempre ntpprima dovecotall'avvio?

Risposte:


23
  1. Questi sono se runlevelsono un'iniziazione di tipo V di sistema utilizzata dalla maggior parte dei sistemi * NIX (con la notevole eccezione dei systemdsistemi basati su). Quando si avvia il kernel / l'utente decide cosa runleveldovrebbe eseguire ed eseguire solo quello runlevel. Ciò significa che, a seconda del caso, runlevelè possibile eseguire l'avvio con un diverso set di programmi. Ci sono anche runlevel per l'arresto e il riavvio, ma poiché ti stai concentrando sulla parte di avvio, ignoriamoli per ora.
  2. Dal momento che solo uno runlevelviene eseguito all'avvio, alcuni programmi dovrebbero / vogliono avviarsi / arrestarsi a diversi runlevels con parametri diversi o uguali nello stesso ordine o diverso (non tutti i runlevel sono uguali in tutti i sistemi operativi). Ma Ubuntu copia i runlevel 3-5 da 2, ecco perché sono gli stessi.
  3. No. runlevelvengono eseguiti solo una volta all'avvio o quando si cambia runlevel.
  4. ntpgli script dovrebbero essere eseguiti prima dovecotnel runlevel 2-5, non nel caso del runlevel 1. Il numero ordinale nei nomi degli script ( ) indica l'ordine di esecuzione. Quindi, tutto dipende dal runlevel che stai usando.S23ntp
  5. Dipende dal Distro, ma nel caso particolare di Ubuntu è possibile aggiungere il proprio script al livello 1 e 2.

Maggiori informazioni nell'articolo di Wikipedia sui runlevel di Ubuntu


quindi se metto lo script in tutte le directory RC.X, verrà eseguito alcune volte o no?
Flash Thunder,

@FlashThunder no.
Braiam,

40

Come altri hanno notato, la risposta riguarda i runlevel che sono sostanzialmente le modalità di funzionamento di un sistema operativo. Su Linux, questi sono di solito:

ID  Name                               Description
0   Halt                               Shuts down the system.
1   Single-user Mode                   Mode for administrative tasks.
2   Multi-user Mode                    Does not configure network interfaces and 
                                       does not export networks services.
3   Multi-user Mode with Networking    Starts the system normally.
4   Not used/User-definable            For special purposes.
5   Start the system normally with 
    with GUI                           As runlevel 3 + display manager.
6   Reboot                             Reboots the system.

Quindi, ciascuna delle rcNdirectory contiene collegamenti simbolici agli script che dovrebbero essere eseguiti a quel runlevel. Tutti gli script effettivi si trovano normalmente nella /etc/init.ddirectory:

$ ls -l /etc/rc5.d/S22cron
lrwxrwxrwx 1 root root 14 Jan 14  2013 /etc/rc5.d/S22cron -> ../init.d/cron

Denominazione dei collegamenti simbolici

Un collegamento simbolico il cui nome inizia con un Sverrà avviato al runlevel in questione mentre quelli il cui nome inizia con Kverrà ucciso. Si noti che tutti i collegamenti in rc6.d, il runlevel di riavvio, iniziano con K. Questo perché tutti dovrebbero essere fermati per un riavvio e nulla dovrebbe essere avviato.

I numeri dopo la lettera iniziale si riferiscono all'ordine di esecuzione degli script collegati. Quelli con numeri più piccoli verranno eseguiti prima di quelli con numeri più alti. Quindi, nel tuo esempio specifico, S23ntpverrà eseguito (avviato in questo caso) prima S24dovecot .


Bella risposta! Cosa succede se due script hanno gli stessi numeri, ad esempio: S01bluetoothe S01rsync, l'ordine sarà arbitrario?
direprobs,

@direprobs eh, bella domanda. Sì, immagino che uno dei due sarebbe scelto a caso. Non posso dire che lo so, però.
terdon

@tredon Penso che saranno scelti in base ai loro nomi di file poiché iniziano con S01il confronto saranno b< r, hai capito . Può essere!
direprobs,

1
La risposta breve è, /etc/init.d/rcdice for s in /etc/rc$runlevel/S*; do …, quindi va semplicemente in ordine di espansione globale; cioè numerico / alfabetico. La lunga risposta è che il codice è molto più complicato di quanto mi ricordi. Proverò a passare un po 'di tempo seriamente a studiarlo nelle prossime 6-8 settimane. A prima vista, sembra che sta estraendo il numero dopo la Se fare qualcosa con esso, così S42beeblebroxe S42zaphodpotrebbe essere più strettamente associata rispetto, ad esempio, S43arthure S44dent.
G-Man dice 'Reinstate Monica' il

grazie davvero per un'ottima risposta, ma ho una domanda. Ho messo il mio programma in avvio, ma la velocità di applicazione è bassa: stackoverflow.com/questions/49251955/...
H.Ghassami

4

1) Le directory multiple di rcX.d specificano quali servizi avviare o arrestare durante il runlevel 'X'.

2) rc0.d è per runlevel 0 che è shutdown. rc6.d è per il riavvio. Il resto è tutto per runlevel diversi (2 - 5). La S sta per start e K per Kill. Questi sono essenzialmente collegamenti agli script originali in /etc/rc.d. I numeri dopo S / K sono la priorità con cui verranno avviati / uccisi i servizi.

3) Sì, se vengono specificati più volte lo script start / kill verrà eseguito più volte. Ma nessuno vuole farlo.

4) Osservando i numeri di priorità, verrà avviato prima il servizio ntp seguito da dovecot.

5) Il quarto punto è la strada.

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.