Los niveles de ejecución

Todos los archivos relacionados con el arranque del sistema están ubicados en el directorio /etc/rc.d. Aquí tiene la lista de los mismos:

$ ls /etc/rc.d
init.d/  rc0.d/  rc2.d/  rc4.d/  rc6.d/            rc.local*    rc.sysinit*
rc*      rc1.d/  rc3.d/  rc5.d/  rc.alsa_default*  rc.modules*

Como ya se dijo, rc.sysinit es el primer archivo ejecutado por el sistema. Este es el archivo responsable de poner en su lugar la configuración básica de la máquina: tipo de teclado, configuración de ciertos dispositivos, verificación del sistema de archivos, etc.

Luego se ejecuta el script rc, con el nivel de ejecución deseado como argumento. Como hemos visto, el nivel de ejecución es un simple entero, y para cada nivel de ejecución <x> definido, debe haber un directorio rc<x>.d correspondiente. Entonces, en una instalación típica de Mandrakelinux, puede ver que están definidos seis niveles de ejecución:

Observemos, por ejemplo, el contenido del directorio rc5.d:

$ ls rc5.d
K15postgresql@  K60atd@      S15netfs@   S60lpd@        S90xfs@
K20nfs@         K96pcmcia@   S20random@  S60nfs@        S99linuxconf@
K20rstatd@      S05apmd@     S30syslog@  S66yppasswdd@  S99local@
K20rusersd@     S10network@  S40crond@   S75keytable@
K20rwhod@       S11portmap@  S50inet@    S85gpm@
K30sendmail@    S12ypserv@   S55named@   S85httpd@
K35smb@         S13ypbind@   S55routed@  S85sound@

Como puede ver, todos los archivos de este directorio son vínculos simbólicos, y todos tienen una forma muy específica. Su forma general es:

<S|K><orden><nombre_del_servicio>

La S significa arrancar (Start) el servicio, y la K significa detener (Kill) el servicio. Los scripts se ejecutan por número de orden ascendente, y si dos scripts tienen el mismo número, se aplica el orden alfabético. También podemos ver que cada vínculo simbólico apunta a scripts ubicados en /etc/rc.d/init.d (excepto local), script que es responsable de controlar un servicio específico.

Cuando el sistema entra en un nivel de ejecución dado, comienza por ejecutar los vínculos K en orden: el comando rc busca donde apunta el vínculo, luego llama al script correspondiente con un argumento solo: stop (detener). Luego ejecuta los scripts S, todavía usando el mismo método, excepto por el hecho de que los scripts se llaman con el argumento start (iniciar).

Por lo tanto, sin mencionar a todos los scripts, podemos ver que cuando el sistema entra en el nivel de ejecución 5, primero ejecuta K15postgresql, es decir, /etc/rc.d/init.d/postgresql stop. Luego K20nfs, luego K20rstatd, hasta el último; acto seguido, ejecuta todos los scripts S: primero S05ampd, que entonces invoca a /etc/rc.d/init.d/apmd start, y así sucesivamente.

Armado con toda esta información, Usted puede crear su propio nivel de ejecución completo en pocos minutos (por ejemplo, usando el nivel de ejecución 4), o evitar el arranque o la detención de un servicio borrando el vínculo simbólico correspondiente. También puede usar una cantidad de programas que son una interfaz para hacer esto, en particular drakxservices (consulte DrakXServices: Configurando los servicios al arranque en Guía de comienzo) que usa una interfaz gráfica, o chkconfig para la configuración de modo texto.

[Tip]Sugerencia

También puede usar el comando chkconfig para listar, añadir o quitar servicios en un nivel de ejecución específico. Consulte chkconfig(8).