Los scripts bajo /etc/init.d se dividen en dos categorías:
scripts llamados directamente por init: Esto sólo sucede en el caso del arranque así como también en caso de un apagado instantáneo (en caso de un corte del suministro eléctrico o por pulsar el usuario la combinación de teclas Ctrl + Alt + Supr).
scripts llamados indirectamente por init: Esto ocurre en el caso de un cambio del nivel de ejecución; aquí generalmente se ejecuta el script superior /etc/init.d/rc, el cual se encarga de que los scripts correspondientes sean ejecutados en el orden correcto.
Todos los scripts se encuentran bajo /etc/init.d. Los que se usan para el cambio del nivel de ejecución se encuentran también en este directorio, pero son ejecutados siempre como un enlace simbólico desde uno de los subdirectorios /etc/init.d/rc0.d hasta /etc/init.d/rc6.d. Esto tiene fines organizativos y evita que los scripts tengan que estar presentes varias veces si son utilizados en diferentes niveles. Para que cada uno de los scripts pueda ser ejecutado como script de arranque o de parada, estos tienen que admitir los dos parámetros start y stop. Aparte de estos dos parámetros, los scripts son capaces de procesar las opciones restart, reload, force-reload y status, cuyo significado se explica con más detalle en la tabla 12.2, “Resumen de las opciones de los scripts de inicio”.
Tabla 12.2. Resumen de las opciones de los scripts de inicio
| Opción | Significado |
|---|---|
| start | Iniciar el servicio |
| stop | Parar el servicio |
| restart | Con el servicio en ejecución, pararlo y reiniciarlo; en caso contrario, iniciarlo |
| reload | Leer la configuración del servicio nuevamente sin parada y reinicio del servicio |
| force-reload | Leer nuevamente la configuración del servicio si este lo soporta; en caso contrario igual que restart |
| status | Mostrar estado actual |
Los enlaces en los subdirectorios específicos de los niveles de ejecución sólo sirven para unir cada script a un determinado nivel. Los enlaces necesarios se crean y se quitan mediante insserv(o mediante el enlace /usr/lib/lsb/install_initd) en el momento de instalar o desinstalar el paquete; ver man insserv.
A continuación se ofrece una breve descripción del primer script de arranque y del último script de parada, así como del script de control:
Este script es ejecutado directamente por init en el arranque del sistema, es independiente del nivel de ejecución requerido por defecto y se ejecuta sólo una vez. Fundamentalmente, se montan los volúmenes proc y devpts, se arranca el blogd y — después de la primera instalación o de una actualización — se ejecuta una configuración básica.
blogd es el primer daemon que inician boot y el script rc y vuelve a cerrarse una vez realizado el trabajo correspondiente (por ejemplo activar subscripts). Este daemon escribe en el archivo de registro /var/log/boot.msg en caso de que /var esté montado con permisos de lectura y escritura, o bien almacena temporalmente todos los datos de la pantalla hasta que /var se monta con permisos de lectura y escritura. Puede obtener información adicional sobre blogd en man blogd.
Adicionalmente, este script se hace cargo del directorio /etc/init.d/boot.d. Al arrancar el sistema se ejecutan en este directorio todos los scripts cuyos nombres comienzan con S. Se realiza la comprobación de los sistemas de archivos, se eliminan los archivos sobrantes en /var/lock y se configura la red para el Loopback-Device. Acto seguido se fija el tiempo real del sistema. Si aparece un fallo grave durante la comprobación y reparación automática de los sistemas de archivo, el administrador del sistema tiene la posibilidad de resolver el problema manualmente después de haber introducido la contraseña de root. Por último se ejecuta el script boot.local.
Aquí se pueden introducir programas o servicios adicionales que deban ejecutarse en el arranque antes de que el sistema entre en uno de los niveles de ejecución. Por su función es equiparable al archivo AUTOEXEC.BAT de DOS.
Opciones de configuración básicas que se deben realizar cuando se cambia desde el modo de usuario único a cualquier otro nivel de ejecución. Aquí se cargan la distribución del teclado y la configuración de la consola.
Este script sólo se ejecuta entrando en los niveles 0 o 6 y puede ejecutarse con el nombre halt o reboot. Dependiendo del nombre asignado a halt, el sistema se reinicia o se apaga totalmente.
Es el script superior, el cual es invocado en cada cambio del nivel de ejecución. Ejecuta los scripts de parada del nivel actual y a continuación los scripts de arranque del nuevo.
Resulta muy fácil añadir scripts init adicionales al concepto descrito en las líneas superiores. Puede obtener información referente al formato, asignación de nombres y organización de los scripts init en el diseño del LSB así como en las páginas del manual de init, init.d e insserv. Las páginas del manual de startproc y killproc también le serán de gran ayuda.
![]() | Aviso |
|---|---|
Elaboración de scripts de arranque propios: Los scripts defectuosos pueden provocar el bloqueo del ordenador. Tenga mucho cuidado a la hora de elaborar scripts propios y pruébelos tanto como le sea posible antes de ejecutarlos en un entorno multiusuario. Para más información básica sobre cómo manejar scripts de arranque y niveles de ejecución, vea el apartado 12.2, “Los niveles de ejecución — runlevels”. | |
Si desea crear un script init para un programa o servicio (service) propio, puede utilizar el archivo /etc/init.d/skeleton como plantilla. Guarde este archivo bajo un nombre nuevo y edite los nombres de programas o archivos y las rutas. Dado el caso también puede añadir al script nuevos componentes propios que sean necesarios para ejecutar correctamente el comando de inicio.
Edite el bloque obligatorio INIT INFO al principio del archivo:
Ejemplo 12.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 de la cabecera INFO, a continuación de Provides:, se introduce el nombre del programa o servicio que va a controlarse por medio del script. En las entradas Required-Start: y Required-Stop: se incluyen todos los servicios que deben ser iniciados o terminados antes del inicio o parada del servicio o programa en cuestión. Esta información se analiza para generar la numeración de los scripts de arranque y parada resultantes en los directorios de niveles de ejecución. En las entradas Default-Start: y Default-Stop: se introducen los niveles de ejecución en los que la aplicación ha de iniciarse o detenerse automáticamente. Una breve descripción de la aplicación en Description: pone punto y final a este bloque.
Utilice el comando insserv <nombre_nuevo_script> para crear los enlaces desde /etc/init.d/ a los directorios de niveles de ejecución correspondientes (/etc/init.d/rc?.d/). insserv analiza automáticamente los datos introducidos en la cabecera del script init y guarda los enlaces para los scripts de arranque y parada en los directorios de niveles de ejecución respectivos. insserv también se encarga de mantener el orden de inicio y parada dentro de un nivel de ejecución mediante la numeración de los scripts.
El editor de niveles de ejecución de YaST constituye una herramienta gráfica para crear los enlaces; véase la sección 12.5, “El editor de niveles de ejecución de YaST” .
Si se trata únicamente de integrar un script ya existente en /etc/init.d/ en el concepto de los niveles de ejecución, cree los enlaces a los directorios de niveles de ejecución respectivos con insserv o el editor de niveles de ejecución de YaST y active el servicio. La próxima vez que inicie el sistema, los cambios serán aplicados y el nuevo servicio se activará automáticamente.