La secuencia de comandos rc
Cuando init ingresa a un nivel de ejecución, llama al script rc con un argumento numérico que especifica el nivel de ejecución al que ir. rc luego inicia y detiene los servicios en el sistema según sea necesario para llevar el sistema a ese nivel de ejecución. Aunque normalmente se llama en el arranque, init puede llamar al script rc para cambiar los niveles de ejecución. Por ejemplo, se puede usar lo siguiente para cambiar el sistema al nivel de ejecución 3:
# init 3
Al cambiar al nivel de ejecución 3, rc lleva el sistema al nuevo nivel de ejecución deteniendo todos los servicios que no deberían ejecutarse en el nivel de ejecución 3 e iniciando todos los servicios que se ejecutan en el nivel de ejecución 3 y que aún no se están ejecutando.
Encontrará todos los scripts de inicialización del sistema en /etc/rc.d. Este subdirectorio tiene más subdirectorios, uno para cada nivel de ejecución:rc0.d–rc6.d y init.d . Dentro de los subdirectorios /etc/rc.d/rc#.d (donde el # se reemplaza por un número de un solo dígito) hay enlaces simbólicos a los scripts maestros almacenados en /etc/rc.d/init.d.
# ls -lrt /etc/rc.d total 60 -rwxr-xr-x 1 root root 889 Jan 29 2015 rc.local -rwxr-xr-x 1 root root 20199 Oct 4 2017 rc.sysinit -rwxr-xr-x 1 root root 2617 Oct 4 2017 rc drwxr-xr-x. 2 root root 4096 Mar 20 16:49 init.d drwxr-xr-x. 2 root root 4096 Mar 20 16:49 rc1.d drwxr-xr-x. 2 root root 4096 Mar 20 16:49 rc0.d drwxr-xr-x. 2 root root 4096 Mar 20 16:49 rc6.d drwxr-xr-x. 2 root root 4096 Mar 20 16:54 rc4.d drwxr-xr-x. 2 root root 4096 Mar 20 16:54 rc3.d drwxr-xr-x. 2 root root 4096 Mar 20 16:54 rc2.d drwxr-xr-x. 2 root root 4096 Mar 20 16:54 rc5.d
Los scripts en init.d toman un argumento de inicio o detención, y ocasionalmente de recargar o reiniciar.
Implementación de nivel de ejecución
Los niveles de ejecución se implementan como directorios en el sistema que contienen scripts de shell para iniciar y detener demonios específicos, p. /etc/rc1.d/. La mayoría de los sistemas tienen directorios para los niveles de ejecución 0-6.
Los scripts dentro de cada directorio se nombran con una S mayúscula , o una K mayúscula , seguido de un número de dos dígitos, seguido del nombre del servicio al que se hace referencia. Los archivos que comienzan con S mayúscula representan secuencias de comandos que se inician al ingresar a ese nivel de ejecución, mientras que los archivos que comienzan con K mayúscula representan secuencias de comandos que se detienen. Los números especifican el orden en que se deben ejecutar los scripts.
Por ejemplo, un daemon puede tener un script llamado S35daemon en rc3.d/ y un script llamado K65daemon para detenerlo en rc2.d/. Tener los números al comienzo del nombre del archivo hace que se clasifiquen y se procesen en el orden deseado.
/etc/rc
Cuando init llama al programa /etc/rc para cambiar los niveles de ejecución, lo hace yendo al directorio para el nivel de ejecución de destino y trabaja a través de todos los archivos de script K## para detener los servicios en ejecución que no deberían estar en el nivel de ejecución de destino. y archivos S##script para servicios que deberían ejecutarse, pero que no se ejecutan actualmente, en el nivel de ejecución de destino.
Debido a la forma en que el programa /etc/rc funciona en Linux, los directorios individuales /etc/rc#.d/ solo tendrán un S##script o un enlace simbólico de K##script para cada servicio. También habrá un enlace simbólico para cada servicio en cada uno de los siete directorios /etc/rc#.d/. Con la excepción del archivo S99local (enlace simbólico a ../rc.local), que solo aparece en /etc/rc1.d/ hasta /etc/rc5.d/ y no tiene ningún enlace simbólico de eliminación correspondiente, siempre debe ser el mismo número de archivos en cada uno de los directorios de nivel de ejecución.
Ordenar dependencias en el arranque
Es importante que los scripts comiencen y terminen en el orden correcto. Por ejemplo, para que NFS y NIS funcionen correctamente, primero se debe iniciar el daemon rpcbind del mapeador de puertos RPC.
/etc/init.d/
Para evitar la duplicación de secuencias de comandos, los archivos de los directorios rc#.d/ son en realidad enlaces simbólicos a archivos de secuencias de comandos ubicados en el directorio /etc/init.d/. Cada servicio instalado en el sistema instala un script en este directorio que puede usarse para controlar ese servicio. Estos scripts están escritos para tomar opciones de inicio que especifican que deben iniciar el servicio y opciones de parada que especifican que deben detener el servicio.
Compatibilidad Upstart y SysV Runlevel
Dado que Upstart no tiene ninguna noción interna de niveles de ejecución, el soporte para ellos está definido por el archivo /etc/init/rc.conf. Este soporte existe para proporcionar compatibilidad con versiones anteriores para la especificación única de Unix y las implementaciones SysV Init anteriores.
/etc/rc.local
Se pueden crear secuencias de comandos personalizadas para realizar tareas en el sistema en el directorio /etc/init.d/ y luego se pueden crear enlaces simbólicos a esas secuencias de comandos en los directorios /etc/rc#.d/ para iniciar o detener las secuencias de comandos como necesario. Para algunas tareas, sin embargo, la creación de secuencias de comandos de inicio completas al estilo de System V, completas con opciones de inicio y detención, es una exageración; algunas tareas, por ejemplo, deben ejecutarse una vez cuando se inicia el sistema, pero nunca deben eliminarse, o no es necesario ejecutarlas cada vez que el sistema cambia de nivel de ejecución, o por otras razones no son totalmente susceptibles de ejecución desde un Script de inicio del sistema V.