7.5. Los scripts de inicio

Los scripts bajo /etc/init.d se dividen en dos categorías:

Scripts ejecutados directamente por init

Esto sólo sucede durante el arranque o 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). La ejecución de estos scripts se define en /etc/inittab.

Scripts ejecutados directamente 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 7.2, “Resumen de las opciones de los scripts de inicio”. Los scripts ejecutados directamente por init carecen de estos enlaces. Dichos scripts se ejecutan cuando es necesario independientemente del nivel de ejecución.

Tabla 7.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:

boot

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 pts, se arranca el blogd (boot logging daemon) 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 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.

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.

boot.setup

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.

halt

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.

rc

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.

7.5.1. Añadir scripts init

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(8), init.d(7), e insserv(8). Las páginas del manual de startproc(8) y killproc(8) también le serán de gran ayuda.

[Warning]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 la Sección 7.3, “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 7.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 los directorios de niveles de ejecución (/etc/init.d/rc?.d/) a los scripts correspondientes en /etc/init.d/. insserv analiza automáticamente los datos introducidos en la cabecera INIT INFO y guarda los enlaces para los scripts de arranque y parada en los directorios de niveles de ejecución respectivos (/etc/init.d/rc?.d/). 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 7.6, “Servicios del sistema (niveles de ejecución)” .

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.

No defina estos enlaces manualmente. El bloque INFO contiene algún error, puede haber problemas cuando insserv se ejecute posteriormente para otro servicio.


SUSE LINUX Manual de administración 9.3