El programa init es el proceso cuyo número de proceso es el 1 y es responsable de la inicialización del sistema del modo requerido, asimismo desempeña un papel especial. Se inicia directamente mediante el núcleo y resiste la señal 9, que generalmente cierra todos los procesos. Los demás programas se inician directamente mediante init o mediante uno de sus subprocesos.
init se configura en el archivo /etc/inittab en el que están definidos los niveles de ejecución (consulte la Sección 28.2.1, “Niveles de ejecución”). El archivo también especifica qué servicios y daemons están disponibles para cada uno de los niveles. En función de las entradas en /etc/inittab, init ejecutará varios guiones. Por razones de claridad, estos guiones, denominados init scripts, están ubicados en el directorio /etc/init.d (consulte la Sección 28.2.2, “Guiones init”).
init se encarga de todo el proceso de encendido y apagado del sistema. Desde este punto de vista, el núcleo se puede considerar un proceso en segundo plano cuya tarea es mantener el resto de procesos y ajustar el tiempo de la CPU y el acceso de hardware en función de las peticiones de otros programas.
En Linux, los niveles de ejecución definen cómo se inicia el sistema y qué servicios están disponibles en el sistema en funcionamiento. Después del arranque, el sistema se inicia tal y como se ha explicado en /etc/inittab en la línea initdefault. Generalmente, esto es 3 o 5. Consulte Tabla 28.1, “Niveles de ejecución disponibles”. Como alternativa, el nivel de ejecución se puede especificar durante el arranque (por ejemplo, en el indicador de inicio). Los parámetros que el núcleo no evalúa directamente pasan a init.
Tabla 28.1. Niveles de ejecución disponibles
Nivel de ejecución | Descripción |
|---|---|
0 | Parada del sistema |
S | Modo monousuario; en el indicador de inicio, sólo para asignaciones de teclado de EE.UU. |
1 | Modo monousuario |
2 | Modo multiusuario local sin red remota (NFS, etc.) |
3 | Modo multiusuario completo con red |
4 | No utilizado |
5 | Modo multiusuario completo con red y gestor de pantalla X—KDM, GDM o XDM |
6 | Reinicio del sistema |
![]() | Evite el nivel de ejecución 2 con una partición /usr montada a través de NFS |
|---|---|
No se debe utilizar el nivel de ejecución 2 si el sistema monta la partición | |
Para cambiar los niveles de ejecución durante el funcionamiento del sistema, introduzca init y el número correspondiente como argumento. Únicamente el administrador del sistema tiene permiso para realizar esta operación. La siguiente lista resume los comandos más importantes del área de niveles de ejecución.
El sistema cambia a modo monousuario. Este modo se utiliza para las tareas de administración y mantenimiento del sistema.
Todos los programas y servicios fundamentales (incluida la red) se inician y los usuarios normales pueden iniciar sesión y trabajar en el sistema sin necesidad de un entorno gráfico.
Se habilita el entorno gráfico. Puede ser un escritorio (GNOME o KDE) o cualquier gestor de ventanas.
El sistema se detiene.
El sistema se detiene y, a continuación, se reinicia.
El nivel de ejecución 5 es el nivel por defecto en todas las instalaciones estándar SUSE Linux. Los usuarios deben iniciar sesión con una interfaz gráfica. El nivel de ejecución por defecto es 3, X Window System debe configurarse correctamente, tal y como se describe en el Capítulo 35, Sistema X Window, antes de que el nivel de ejecución pase a 5. A continuación, compruebe el funcionamiento del sistema introduciendo init 5. Si todo funciona tal y como se espera, puede utilizar YaST para establecer el nivel de ejecución por defecto en 5.
Generalmente, ocurren dos cosas al cambiar los niveles de ejecución. En primer lugar, se inician los guiones de detención del nivel de ejecución actual al mismo tiempo que se cierran algunos programas fundamentales para el nivel de ejecución. A continuación, se inician los guiones de inicio del nuevo nivel de ejecución. En este paso y en la mayoría de los casos, se inician algunos programas. Por ejemplo, al cambiar del nivel de ejecución 3 al 5, sucede lo siguiente:
El administrador (root) solicita a init que cambie a un nivel de ejecución diferente introduciendo init 5.
init consulta su propio archivo de configuración (/etc/inittab) y determina si debe iniciar /etc/init.d/rc con el nuevo nivel de ejecución como parámetro.
Ahora rc llama a todos los guiones de detención del nivel de ejecución actual, pero en el nivel de ejecución nuevo, sólo a aquéllos para los que no existe un guión de inicio. En este ejemplo, aparecen todos los guiones ubicados en /etc/init.d/rc3.d (el nivel de ejecución antiguo era 3) y que comiencen por la letra K. El número que sigue a la letra K especifica el orden de inicio, puesto que es necesario tener en cuenta algunas dependencias.
Los últimos elementos que se inician son los guiones de inicio del nivel de ejecución nuevo. En este ejemplo, éstos se ubican en /etc/init.d/rc5.d y comienzan con S. Aquí, también se aplica el mismo procedimiento para el orden en el que se inician.
Al cambiar al mismo nivel de ejecución que el actual, init sólo comprueba si existen cambios en /etc/inittab y lleva a cabo los pasos adecuados, por ejemplo, para iniciar un getty en otra interfaz.
Existen dos tipos de guiones en /etc/init.d:
Únicamente durante el proceso de arranque o si el sistema se ha apagado de forma inmediata (debido a un fallo en la alimentación o si el usuario ha pulsado Ctrl-Alt-Del). La ejecución de estos guiones se describe en /etc/inittab.
Se ejecutan al cambiar el nivel de ejecución y siempre llaman al guión maestro /etc/init.d/rc, que garantiza el orden correcto de los guiones correspondientes.
Todos los guiones se ubican en /etc/init.d. En esta ubicación también se encuentran los guiones de cambio del nivel de ejecución a los que se llama mediante enlaces simbólicos desde un subdirectorio (/etc/init.d/rc0.d a /etc/init.d/rc6.d). Esto se debe a razones de claridad y evita la creación de guiones duplicados al utilizarlos en varios niveles de ejecución. Puesto que cada guión se puede ejecutar como guión de inicio o de detención, estos guiones deben poder admitir los parámetros de start y stop. Los guiones también admiten las opciones restart (reiniciar), actualizar, force-reload (forzar-actualizar) y estado. Estas opciones se explican en la Tabla 28.2, “Posibles opciones del guión init”. Los guiones ejecutados directamente mediante init no disponen de estos enlaces. Cuando sea necesario, se ejecutan de forma independiente desde el nivel de ejecución.
Tabla 28.2. Posibles opciones del guión init
Opción | Descripción |
|---|---|
| Inicia el servicio. |
| Detiene el servicio. |
| Si el servicio está en funcionamiento, lo detiene y, a continuación, lo reinicia. Si no está en funcionamiento, lo inicia. |
| Actualiza la configuración sin detener ni reiniciar el servicio. |
| Actualiza la configuración si el servicio es compatible con esta función. De lo contrario, realiza lo mismo que si la opción fuese |
| Muestra el estado actual del servicio. |
Los enlaces de cada subdirectorio específico del nivel de ejecución permiten asociar guiones a diferentes niveles de ejecución. Al instalar o desinstalar los paquetes, estos enlaces se agregan y se eliminan mediante el insserv del programa (o utilizando /usr/lib/lsb/install_initd, guión que ejecuta este programa). Para obtener más información, consulte la página Man de insserv(8).
A continuación, se ofrece una introducción corta de los guiones de arranque y detención ejecutados en primer o último lugar, así como una explicación del guión de mantenimiento.
boot
Ejecutado al iniciar el sistema directamente mediante init. Es independiente del nivel de ejecución seleccionado y sólo se ejecuta una vez. Aquí, se montan los sistemas de archivos proc y pts y se activa blogd (daemon de inicio de sesión de arranque). Si se arranca el sistema por primera vez después de una actualización o una instalación, se inicia la configuración del sistema inicial.
El daemon blogd es un servicio iniciado por boot y rc antes que cualquier otro. Se detiene una vez completadas las acciones originadas por los guiones anteriores (por ejemplo, ejecución de varios guiones). blogd escribe cualquier salida de pantalla en el archivo de registro /var/log/boot.msg, pero sólo si /var está montado en lectura-escritura. De lo contrario, blogd mantiene en el búfer todos los datos de la pantalla hasta que /var esté disponible. Puede obtener más información acerca de blogd en la página Man de blogd(8).
El guión boot también se encarga del inicio de todos los guiones en /etc/init.d/boot.d con un nombre que empieza por S. Los sistemas de archivos se comprueban y los dispositivos loop se configuran si fuese necesario. También se establece la hora del sistema. Si se produce un error durante la comprobación y la reparación automática del sistema de archivos, el gestor del sistema puede intervenir después de haber introducido la contraseña root. El último guión ejecutado es el boot.local.
boot.local
Introduzca aquí los comandos adicionales para ejecutar durante el arranque antes de cambiar a un nivel de ejecución. Se puede comparar a AUTOEXEC.BAT en sistemas DOS.
boot.setup
Este guión se ejecuta al cambiar del modo monousuario a cualquier otro nivel de ejecución y es responsable de varios ajustes básicos, como la distribución del teclado y la inicialización de las consolas virtuales.
halt
Este guión sólo se ejecuta durante el cambio al nivel de ejecución 0 o 6. Se ejecuta como halt o como reboot. El apagado o la reinicialización del sistema dependen de como se ha ejecutado halt.
rc
Este guión ejecuta los guiones adecuados del nivel de ejecución actual e inicia los guiones del nuevo nivel de ejecución seleccionado.
Puede crear sus propios guiones e integrarlos fácilmente en el esquema descrito anteriormente. Si desea obtener instrucciones sobre el formato, el nombre y la organización de guiones personalizados, consulte las especificaciones de LSB y las páginas Man de init, init.d e insserv. También puede consultar las páginas Man de startproc y killproc.
![]() | Los guiones init incorrectos pueden detener el sistema. |
|---|---|
Los guiones init incorrectos pueden bloquear la máquina. Edite esos guiones con cuidado y, si es posible, realice una comprobación exhaustiva en el entorno multiusuario. Puede encontrar información útil acerca de los guiones init en la Sección 28.2.1, “Niveles de ejecución”. | |
Para crear un guión init personalizado para un determinado programa o servicio, utilice como plantilla el archivo /etc/init.d/skeleton. Guarde una copia de este archivo con un nombre nuevo y edite el programa y los nombres de archivos, las vías y otros detalles correspondientes si fuese necesario. Puede que necesite mejorar el guión con código propio, por lo que las acciones correctas se originan mediante el procedimiento init.
El bloque INIT INFO de la parte superior es un componente necesario del guión y debe editarse. Consulte el Ejemplo 28.1, “Bloque INIT INFO mínimo”.
Ejemplo 28.1. Bloque INIT INFO mínimo
### BEGIN INIT INFO
# Provides: FOO
# Required-Start: $syslog $remote_fs
# Required-Stop: $syslog $remote_fs
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Description: Start FOO to allow XY and provide YZ
### END INIT INFO
En la primera línea del bloque INFO, después de Provides:, especifique el nombre del programa o servicio controlado por el guión init. En las líneas Required-Start: y Required-Stop:, especifique todos los servicios que deban iniciarse o detenerse antes de que se inicie o se detenga el propio servicio. Esta información se utilizará más adelante para generar la numeración de los nombres de guiones, tal y como aparecen en los directorios del nivel de ejecución. Después de Default-Start: y Default-Stop:, especifique los niveles de ejecución en los que el servicio debería iniciarse o detenerse automáticamente. Por último, en Description:, proporcione una descripción corta del servicio en cuestión.
Para crear los enlaces desde los directorios de nivel de ejecución (/etc/init.d/rc?.d/) a los guiones correspondientes en /etc/init.d/, introduzca el comando insserv new-script-name. El programa insserv evalúa el encabezado INIT INFO para crear los enlaces necesarios para iniciar y detener guiones en los directorios de nivel de ejecución (/etc/init.d/rc?.d/). El programa también se encarga del orden de inicio y detención correcto de cada nivel de ejecución al incluir los números necesarios en los nombres de los enlaces. Si prefiere una herramienta gráfica para crear dichos enlaces, utilice el editor de niveles de ejecución proporcionado por YaST, tal y como se describe en la Sección 28.2.3, “Configuración de los servicios de sistema (nivel de ejecución) mediante YaST”.
Si un guión que ya aparece en /etc/init.d/ debe integrarse en el esquema de nivel de ejecución existente, cree los enlaces en los directorios de nivel de ejecución mediante insserv o habilitando el correspondiente servicio en el editor de niveles de ejecución de YaST. Los cambios que haya realizado se aplicarán durante el siguiente arranque; el nuevo servicio se iniciará automáticamente.
No establezca estos enlaces de forma manual. Si algo no funciona en el bloque INFO, surgirán problemas cuando se ejecute insserv en otro servicio.
Después de iniciar el módulo YaST mediante ++, éste muestra una descripción general que enumera todos los servicios disponibles y el estado actual de cada servicio (inhabilitado o habilitado). Decida si desea utilizar el módulo en o en . El por defecto debe ser suficiente para la mayoría de finalidades. La columna de la izquierda muestra el nombre del servicio, la columna del centro indica su estado actual y la de la derecha proporciona una descripción corta. Para el servicio seleccionado, se proporciona una descripción detallada en la parte inferior de la ventana. Para habilitar un servicio, selecciónelo en la tabla y, a continuación, elija . Se aplican los mismos pasos para inhabilitar un servicio.
Para llevar a cabo un control detallado de los niveles de ejecución en los que se inicia o se detiene el servicio, o para cambiar el nivel de ejecución por defecto, primero seleccione . En la parte superior aparecerá el nivel de ejecución por defecto en curso o “initdefault” (el nivel de ejecución en el que se arranca por defecto el sistema). Generalmente, el nivel de ejecución por defecto de un sistema SUSE Linux es el 5 (modo multiusuario completo con red y X). Otra opción podría ser el nivel de ejecución 3 (modo multiusuario completo con red).
El cuadro de diálogo YaST permite seleccionar uno de los niveles de ejecución (tal y como aparecen en la lista de la Tabla 28.1, “Niveles de ejecución disponibles”) como el nuevo nivel por defecto. Además, utiliza la tabla de esta ventana para habilitar o inhabilitar servicios y daemons individuales. La tabla enumera los servicios y daemons disponibles, muestra si están actualmente habilitados en el sistema y, si es así, en qué niveles de ejecución. Después de haber seleccionado una de las filas con el ratón, haga clic en las casillas de verificación que representan los niveles de ejecución (, , , , , , y ) para definir los niveles en los que el servicio o daemon seleccionado debería ejecutarse. El nivel de ejecución 4 no está inicialmente definido para permitir la creación de un nivel personalizado. A continuación, en la descripción general de la tabla, se proporciona una descripción corta del actual servicio o daemon seleccionado.
Mediante , decida si se debe activar un servicio. comprueba el estado actual. (Ajustar o Reajustar) le permite seleccionar si desea aplicar los cambios al sistema o restaurar los ajustes existentes antes de iniciar el editor de nivel de ejecución. Al seleccionar se guardarán los ajustes modificados en el disco.
![]() | Los ajustes de nivel de ejecución incorrectos pueden dañar el sistema. |
|---|---|
Los ajustes de nivel de ejecución incorrectos pueden inhabilitar el sistema. Antes de aplicar los cambios, asegúrese de que conoce las consecuencias. | |