Ejecutar scripts al finalizar la sesión en GNU/Linux

votar

Si alguna vez has necesitado que se ejecute un script o una serie de comandos de forma automática cada vez que cierras tu sesión de Linux quizás este artículo te pueda servir para aprender cómo hacerlo.

Para empezar debemos saber que cuando iniciamos una sesión de Linux arrancamos con unos niveles de ejecución (runlevel) y que van desde el 0 al 6. Los niveles del 1 al 5 son modos de inicio del ordenador y los niveles 0 y 6 significan apagado y reinicio del sistema respectivamente. De esta manera podemos cambiar de nivel de ejecución (con la consiguiente carga de servicios que lleva implícito), apagar o reiniciar la computadora mediante el uso de la orden init más el número del nivel de ejecución que deseemos. Por ejemplo, con la siguiente orden reiniciaríamos el sistema:

$ sudo init 6

Sabiendo que existen determinados niveles de ejecución debemos saber también que dentro de la carpeta /etc tenemos otras 7 carpetas del tipo /etc/rcN.d , sustituyendo N por un número del 0 al 6 que se corresponde con el nivel de ejecución. Dentro de esta carpeta es donde se encuentran los archivos que van a ejecutar los servicios cada vez que invocamos un nivel de ejecución. Hay que aclarar que realmente en estas carpetas no se encuentran los archivos, si no que lo que realmente se encuentra en ellas son enlaces simbólicos a los scripts que van a ser ejecutados. Estos scripts suelen estar almacenados en la carpeta /etc/init.d.

Bueno, volviendo al tema de los archivos en las carpetas de los distintos niveles, veremos que todos los archivos empiezan bien por S o bien por K, seguido por un número de 2 cifras y el nombre que especifica el contenido del script. Bien, pues este forma de escribir el nombre de los archivos atiende a un código que el sistema entenderá y sabrá como ejecutar las órdenes, la S quiere decir Start e indicará al sistema que arrancará este servicio, la K significa Kill con lo que le indicará que debe matar o finalizar ese servicio. El número de 2 cifras que le sigue indica el orden en el que se ejecutarán los scripts empezando por el 00 y terminando por el 99. El nombre de después ya es a libre elección.

Ahora viene lo que interesa del artículo, si queremos ejecutar un script con una serie de comandos cuando se reinicie el sistema lo único que debemos hacer es crear un enlace simbólico al script creado que apunte la carpeta /etc/rc0.d (se ejecutará cuando apaguemos el ordenador) y a la carpeta /etc/rc6.d (este se ejecutará cuando lo reiniciemos).

Para verlo más claro vamos a crear un ejemplo que borrará un determinado archivo al finalizar la sesión.

  1. Crearemos el archivo que contendrá el script en la carpeta que deseemos, ya hemos dicho que normalmente el sistema los tiene creados en /etc/init.d pero puede estar donde queramos.
  2. $ cat > /ruta/archivo.sh

  3. Introducimos los comandos a ejecutar. Debemos saber que existen unas reglas o formalismo de escritura de scripts del sistema pero que si no los seguimos no pasa nada. En nuestro caso borraremos el archivo que guarda las reglas de las conexiones de red para que cada vez que accedamos al sistema nos cree unas nuevas (estamos utilizando la distribución Kubuntu, por si este archivo no se encontrase en el mismo lugar en otras distribuciones):
  4. #!/bin/bash
    rm /etc/udev/rules.d/70persistentnet.rules

  5. Pulsamos <Ctrl>+<d> para finalizar la edición del archivo y salvar los datos.
  6. Damos permisos de ejecución al script creado mediante el uso de la instrucción chmod:
  7. $ chmod +x /ruta/archivo.sh

  8. Por último creamos los enlaces simbólicos en las carpetas correspondientes a los niveles de ejecución en los que deseemos que este script se ejecute eligiendo el nombre atendiendo a las reglas anteriormente explicadas ([S,K][0099] nombre). En nuestro caso crearemos los enlaces a las carpetas /etc/rc0.d y /etc/rc6.d (este paso deberemos hacerlo con derechos de superusuario):
  9. $ sudo ln s /ruta/archivo.sh /etc/rc0.d/S25borrar
    $ sudo ln s /ruta/archivo.sh /etc/rc6.d/S25borrar

Con estos pasos podremos crear los scripts que necesitemos que serán ejecutados cuando se finalice la sesión en el sistema, pero seguramente habréis leído mas allá de lo aquí expuesto y posiblemente halláis descubierto la forma en la que se pueden ejecutar scripts al iniciar el ordenador en vez de al finalizarlo. Pues tenéis razón es tan sencillo como crear los enlaces al nivel de ejecución con el que iniciemos el sistema o en la carpeta /etc/rcS.d que se ejecutarán sea cual sea el nivel de ejecución.

Un saludo.

Escrito por Iván Félix.

No hay entradas relacionadas.

Acerca de S@mutops

Estudiante de Ingeniería Técnica en Informática de Gestión y residente en Segovia (España). Usuario de Ubuntu y defensor del Software Libre y GNU/Linux. Blogger, músico y cinéfilo en mis ratos libres.
Esta entrada fue publicada en GNU/Linux con las etiquetas , . Añadir un marcador con el enlace permanente.
  • http://www.shakaran.es shakaran

    Muy buen artículo y explicado de forma muy clara.