Los scripts bajo /etc/init.d se
dividen en dos categorías:
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.
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 |
|---|---|
| Iniciar el servicio |
| Parar el servicio |
| Con el servicio en ejecución, pararlo y reiniciarlo; en caso contrario, iniciarlo |
| Leer la configuración del servicio nuevamente sin parada y reinicio del servicio |
| Leer nuevamente la configuración del servicio si este lo soporta; en caso contrario igual que restart |
| 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.setupOpciones 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.
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.
![]() | 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.