SysV Init: Ejecutando scripts al inicio

Publicado por Diego Córdoba el

Hoy vamos a aprender a crear un script de inicio en una distro SysV Init como Devuan.

Ya hemos hablado en un post anterior sobre cómo configurar un script para que se ejecute al inicio de una distro systemd y en Runit. Hoy vamos a ver cómo hacerlo en una distro SysV Init.

Ya hablamos con anterioridad sobre SysV Init y el proceso de inicio de Linux, hoy vamos a centrarnos en un pequeño ejemplo de configuración de un script de arranque en este sistema de inicio.

Por cierto, este post es documentación adicional a lo que expliqué en el canal de youtube 🙂

Supongamos que ya hemos escrito nuestro ejecutable de inicio, sea un script, un binario, cualquier cosa que podamos ejecutar en el sistema por medio de una terminal de comandos.

Supongamos que lo hemos llamado «miscript.sh«, y lo hemos almacenado donde corresponde, en /usr/local/bin, y convenientemente le hemos dado permisos de ejecución.

El primer paso es crear el script de inicio en init.d que va a permitirnos lanzar el ejecutable.

Para ello vamos a crearlo dentro de /etc/init.d/, con el siguiente contenido (editen lo que quieran para adaptarlo a sus necesidades):

#!/bin/bash
### BEGIN INIT INFO
# Provides:          miscript
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Script de ejemplo al inicio
### END INIT INFO

case "$1" in
    start)
        /usr/local/bin/miscript.sh &
        ;;
    stop)
        # Comandos para detenerlo si es necesario
        ;;
    restart)
        $0 stop
        $0 start
        ;;
    *)
        echo "Uso: $0 {start|stop|restart}"
        exit 1
        ;;
esac

exit 0

Aquí se ve la parte más importante, la línea que llama al script cuando se lanza este ejecutable de init.d.

Es importante mencionar el símbolo & al final de la línea. Esto es porque SysV Init ejecuta los scripts de inicio en orden y de manera secuencial. Este símbolo permite que el script se ejecute en segundo plano, y el gestor de inicio pueda continuar ejecutando otros scripts y servicios, y no se detenga acá si nuestro servicio demora tiempo en arrancar, o peor, si se rompe y termina con error.

Una vez escrito este archivo, debemos darle permisos de ejecución:

$ sudo chmod +x /etc/init.d/miscript.sh

Una vez que hicimos esto, ya está listo, podemos usar a SysV Init para lanzar nuestro script manualmente, o de manera automatizada.

📚 ¿Querés saber más de GNU/Linux y sus detalles? Sumate a nuestro curso!

Gestión manual de un script de inicio en SysV Init

Para ejecutar nuestro script tenemos dos maneras.

Por un lado, podemos usar el comando service invocando al script y la opción de lanzamiento que hayamos configurado (start, stop, restart, etc.).

$ sudo service miscript start

Esto ejecutará el archivo que hayamos guardado en /usr/local/bin.

Otra forma, a la vieja escuela, es llamar directamente al script de init.d:

$ sudo /etc/init.d/miscript start

Esto realizará el mismo procedimiento.

Gestión automática

SysV init corre niveles de ejecución, o runlevels.

Podríamos decir que estos runlevels son modos de arranque del sistema. Cada runlevel, al arrancar, va a ejecutar ciertos servicios.

Esto lo hace mediante la creación de enlaces simbólicos en los directorios de inicio de rc, /etc/rcN.d, donde N hace referencia al número de runlevel.

Pero no voy a profundizar mucho en esto porque ya lo he explicado acá:

SysV: El inicio de GNU/Linux y el caso de SysV init

Así que vamos a la práctica. Si queremos que nuestro script se ejecute de manera predeterminada en todos los runlevels, solamente debemos crear los enlaces simbólicos de una manera sencilla con:

$ sudo update-rc.d miscript defaults

Y listo, al próximo reinicio, ya tendremos nuestro script en ejecución.

De manera similar, para evitar que se ejecute nuevamente al inicio podemos correr:

$ sudo update-rc.d -f miscript remove

Y de esta manera se eliminarán los enlaces simbólicos creados.

📚 ¿Querés saber más de GNU/Linux y sus detalles? Sumate a nuestro curso!


Y con esto hemos llegado al final!

Una breve guía para ejecutar scripts de inicio en sistemas SysV Init como Devuan.

Espero que les sea de utilidad! Cualquier duda ya saben, estamos en la comunidad JuncoTIC en Telegram, no olviden pasarse por ahí 🙂

Hasta la próxima!


¿Querés aprender más? 📚

👉 Visitá nuestros cursos!
💬 Y si tenés dudas, o querés dejarnos tus comentarios sumate a la Comunidad JuncoTIC en Telegram!
¡Te esperamos!

Categorías: Linux

Diego Córdoba

- Ingeniero en Informática - Mgtr. Teleinformática - Instructor GNU/Linux, Programación, Redes TCP/IP, criptografía y ciberseguridad. - (Ex) Docente universitario e investigador