Los directorios rc0.d, rc1.d, ... en / etc

30

Estoy corriendo Ubuntu donde tengo los directorios /etc/rc0.d, /etc/rc1.d, /etc/rc2.d, ..., /etc/rc6.d.

Archivos de ejemplo de mi máquina:

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

Preguntas:

  1. ¿Cuál es el propósito de los múltiples directorios "rc"?
  2. ¿Por qué Ubuntu instaló duplicados de dovecoty ntpen todos los directorios excepto rc0.dy rc6.d?
  3. Si se especifican varias veces como arriba, ¿se ejecutan realmente varias veces?
  4. ¿Puedes distinguir de lo anterior en qué orden dovecoty ntpse ejecutará al inicio?
  5. ¿Cuál es la forma correcta de decirle a Ubuntu que siempre se ejecute ntpantes dovecoten el inicio?
roger.james
fuente

Respuestas:

23
  1. Estos son runlevels y son una iniciación de estilo System V utilizada por la mayoría de los sistemas * NIX (con la notable excepción de los systemdsistemas basados). Al arrancar el núcleo / usuario decide qué runleveldebe ejecutar y ejecuta solo eso runlevel. Lo que significa que dependiendo del runlevelpuede arrancar con un conjunto diferente de programas. También hay niveles de ejecución para detener y reiniciar, pero como se está centrando en la parte de inicio, ignorémoslos por ahora.
  2. Dado que solo runlevelse ejecuta uno en el arranque, algunos programas deberían / ​​desear iniciar / detenerse en diferentes runlevels con parámetros diferentes o iguales en el mismo orden o en un orden diferente (no todos los niveles de ejecución son iguales en todos los sistemas operativos). Pero Ubuntu copia los niveles de ejecución 3-5 de 2, por eso son iguales.
  3. No. runlevels se ejecutan solo una vez en el inicio o cuando cambias runlevel.
  4. ntplos scripts deben ejecutarse primero y luego dovecoten el nivel de ejecución 2-5, no en el caso del nivel de ejecución 1. El número ordinal en los nombres de script ( ) establece el orden de ejecución. Por lo tanto, todo depende del nivel de ejecución que esté utilizando.S23ntp
  5. Depende de la distribución, pero en el caso particular de Ubuntu puede agregar su script a los niveles de ejecución 1 y 2.

Más información en el artículo de Wikipedia sobre los niveles de ejecución de Ubuntu

Braiam
fuente
Entonces, si pongo script en todos los directorios RC.X, ¿se ejecutará pocas veces o no?
Flash Thunder
@FlashThunder no.
Braiam
40

Como otros han señalado, la respuesta se trata de niveles de ejecución, que son básicamente los modos de operación de un sistema operativo. En Linux, estos suelen ser:

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.

Entonces, cada uno de los rcNdirectorios contiene enlaces simbólicos a los scripts que deben ejecutarse en ese nivel de ejecución. Todos los scripts reales están normalmente en el /etc/init.ddirectorio:

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

Nomenclatura simbólica de enlaces

Un enlace simbólico cuyo nombre comienza con un Sse iniciará en el nivel de ejecución en cuestión, mientras que aquellos cuyo nombre comience con Kse matarán. Observe que todos los enlaces en rc6.del nivel de ejecución de reinicio comienzan con K. Esto se debe a que todos deberían detenerse para reiniciar y no debería iniciarse nada.

Los números después de la letra inicial se refieren al orden de ejecución de los scripts vinculados. Aquellos con números más pequeños se ejecutarán antes que aquellos con números más altos. Entonces, en su ejemplo específico, S23ntpse ejecutará (comenzó en este caso) antes S24dovecot .

terdon
fuente
¡Gran respuesta! ¿Qué pasa si dos scripts tienen los mismos números, por ejemplo: S01bluetoothy S01rsync, el orden será arbitrario?
direprobs
@direprobs eh, buena pregunta. Sí, supongo que cualquiera de los dos sería elegido al azar. Sin embargo, no puedo decir que lo sé.
terdon
@tredon Creo que se elegirán en función de sus nombres de archivo, ya que comienzan con S01la comparación será b< r, se entiende la idea. ¡Tal vez!
direprobs
1
La respuesta corta es, /etc/init.d/rcdice for s in /etc/rc$runlevel/S*; do …, por lo que simplemente va en orden de expansión global; es decir, numérico / alfabético. La respuesta larga es que el código allí es mucho más complicado de lo que recuerdo. Intentaré pasar un tiempo serio estudiándolo en algún momento dentro de las próximas seis u ocho semanas. A primera vista, parece que está extrayendo el número después de la Sy hacer algo con él, así S42beeblebroxy S42zaphodpodría estar más estrechamente asociada que, por ejemplo, S43arthury S44dent.
G-Man dice 'Restablecer a Monica' el
Realmente gracias por una gran respuesta, pero tengo una pregunta. Puse mi programa en el inicio, pero la velocidad de la aplicación es baja: stackoverflow.com/questions/49251955/…
H.Ghassami
4

1) Los directorios múltiples rcX.d especifican qué servicios iniciar o detener durante el nivel de ejecución 'X'.

2) rc0.d es para el nivel de ejecución 0 que está apagado. rc6.d es para reiniciar. El resto son para diferentes niveles de ejecución (2 - 5). La S significa inicio y K para matar. Estos son esencialmente enlaces a los scripts originales en /etc/rc.d. Los números después de S / K son la prioridad por la cual los servicios se iniciarán / matarán.

3) Sí, si se especifican varias veces, el script de inicio / eliminación se ejecutará varias veces. Pero nadie quiere hacer eso.

4) Mirando los números de prioridad, el servicio ntp se iniciará primero seguido de dovecot.

5) El cuarto punto es el camino.

Albert
fuente