Olvidemos init.d
o rcx.d
y mantener las cosas muy simples. Imagina que estuvieras programando un programa cuya única responsabilidad es ejecutar o eliminar otros scripts uno por uno.
Sin embargo, su próximo problema es asegurarse de que se ejecuten en orden. ¿Cómo harías eso?
E imaginemos que este programa mira dentro de un scripts
carpeta para ejecutar los scripts. Para ordenar la prioridad de los scripts, los nombraría en, digamos, orden numérico. Este orden es el que dicta la relación entre init.d
y rc
En otras palabras, init.d
contiene los scripts a ejecutar y el rcX.d
contiene su orden de ejecución.
El X
valor en rcX.d
es el nivel de ejecución. Esto podría traducirse libremente al estado actual del sistema operativo.
Si cavas dentro del rcX.d
scripts encontrará este formato:
Xxxabcd
X
se reemplaza conK
oS
, que significa si el script debe serkilled
ostarted
en el nivel de ejecución actualxx
es el número de pedidoabcd
es el nombre del script (el nombre es irrelevante, sin embargo, a dónde apunta es el script que se ejecutará)
Hay varios sistemas de inicio diferentes para Linux. Los principales son SysVinit (el tradicional), Upstart (reemplazo de Ubuntu) y SystemD (impulsado por Fedora y Gnome). Los directorios /etc/init.d
y /etc/rc?.d
son utilizados por SysVinit. Es posible que el libro los mencione con respecto a Ubuntu porque la información está un poco anticuada (Ubuntu solía usar SysVinit como todos los demás) o porque esos directorios aún existen por compatibilidad.
/etc/init.d
contiene un montón de scripts, cada uno con instrucciones para iniciar y detener un servicio. Algunos de estos servicios deben iniciarse en el momento del arranque; otros deben iniciarse en modo multiusuario pero no en modo de mantenimiento de usuario único; y es posible definir diferentes modos con diferentes conjuntos de servicios deseados. SysVinit gestiona esto a través de niveles de ejecución. El directorio /etc/rc$N.d
contener los scripts que se ejecutarán al ingresar al nivel de ejecución N (/etc/rc$N.d/S*
) y los scripts a ejecutar al salir del nivel de ejecución N (/etc/rc$N.d/K*
). Debido a que muchos niveles de ejecución tienen scripts en común, en lugar de almacenar una copia de los scripts para cada nivel de ejecución, todos los scripts se almacenan en una única ubicación /etc/init.d
y los directorios específicos del nivel de ejecución /etc/rc?.d
contienen enlaces simbólicos. Además, los nombres de los enlaces simbólicos indican si se debe iniciar el servicio (S*
) o detenido (asesinado, K*
) en ese nivel de ejecución, y se usa un prefijo numérico para controlar el orden en que se ejecutan los scripts.
El script responsable de atravesar /etc/rc$N.d
es /etc/init.d/rc
(en Ubuntu anterior a Upstart y en Debian; las ubicaciones pueden variar en otras distribuciones de Linux).
/etc/init.d
es el directorio al que pertenecen los scripts de inicio.
El etc/rcX.d
es donde los enlaces controlan qué servicios se eliminan o se inician al ingresar al nivel de ejecución X
. Archivos en rcX.d
que comienzan con K se ejecutan con el parámetro stop
y archivos que comienzan con S
se ejecutan con el parámetro start
. Es típico secuenciar la orden de inicio y parada usando un número de dos dígitos después del K
o S
. Para garantizar un orden correcto de inicio y fin, es común que las dos secuencias sumen 100.
Los programas se pueden deshabilitar en un nivel de ejecución eliminando los enlaces o cambiando el caso del K
o S
a k
o s
.
EDITAR:los administradores normalmente ejecutan los scripts desde /etc/init.d
que puede ser un enlace simbólico a otro directorio dependiendo de la distribución. (Diferentes distribuciones tienen diferentes estándares).
El rcX.d
son utilizados por el código de inicialización para cambiar los niveles de ejecución.