miércoles, 6 de junio de 2012

Hacer que se ejecute un script en el inicio del sistema

En este tema se explican varios  procedimientos para hacer que se pueda ejecutar un script en el inicio del sistema. Según si queremos que el script se ejecute en las sesiones de todos los usuarios, o solo en la sesión de uno de ellos, si queremos que se ejecute con o sin permisos de root, debemos elegir uno u otro procedimiento.

1-- Sistema-Preferencias-Aplicaciones al inicio: "Añadir programa al inicio":  en "Comando" se pone la dirección en donde esta el script que previamente hemos creado y guardado en algún lugar del disco duro. Este es el procedimiento que recomiendo si el script que queremos que se inicie al inicio del sistema solamente para una determinada sesión de usuario, pero no para otras sesiones de otros usuarios del sistema.

Si tenemos configurado el sistema para que se puedan abrir varias sesiones de varios usuarios: De esta forma podemos hacer que en la sesión de un usuario se ejecute un script y en la sesión de otro usuario no se ejecute ese script, o que en una sesión se ejecute un script, y en otra sesión de otro usuario se ejecute otro script.

Es un método para usar script con un usuario en concreto.

2-- Gnome-schedule: instalamos el paquete gnome-schedule y lo ejecutamos con o sin permisos de root según necesitemos que el script se ejecute con o sin permisos de root.  Configuramos el programa: en Hora y Fecha: Básico -> "Al Reiniciar"  , para que el script se autoinicie al inicio del sistema.  Mas información sobre este programa en Programar tareas repetitivas con Gnome-schedule

Con este procedimiento podemos crear una tarea programada distinta, que ejecute un script al inicio,  para cada usuario si ejecutamos el programa sin permisos de root, o crear una tarea programada que se ejecute en las sesiones de todos los usuarios si ejecutamos el programa con permisos de root



3-- Iniciar el script desde el directorio /etc/init.d

-- El primer paso es crear el script ( mi-script.sh  , este archivo script  puede tener cualquier nombre   ) en el directorio /etc/init.d
-- Después de esto tenemos que darle permisos al archivo para que se pueda ejecutar sin problemas, esto lo hacemos con el siguiente comando: chmod +x mi-script.sh
-- Podemos ejecutar el script, para comprobar que funciona bien, de la siguiente manera: ./mi-script.sh
-- Para agregar este comando para que sea ejecutado en el momento que el sistema arranque, lo hacemos con el siguiente comando: update-rc.d mi-script.sh defaults 80
-- Ahora el script se va a ejecutar cada vez que el sistema arranque.

El primer paso se hace desde el Nautilus ejecutado en modo root, iniciado desde la terminal con: sudo nautilus los demás comandos se ejecutan desde la terminal de root y desde el directorio /etc/init.d

Con este procedimiento creamos un script que se iniciara en las sesiones de todos los usuarios, o que necesitamos que se inicie antes de que se entre en la sesión gráfica de usuario.

------------------

Añadido: gracias a un comentario de Guadafan, en el foro de Guadalinex.org

4-- También se puede lanzar el/los scripts desde el archivo /etc/rc.local
Dicho archivo tiene este contenido (traducido):

Este script se ejecuta al final de cada nivel de ejecución multiusuario.

# Asegúrese de que el script "exit 0" en caso de éxito o de cualquier otro
# Valor en caso de error.
#
# Con el fin de habilitar o deshabilitar este script sólo cambia la ejecución
Número de bits.
#
# Por defecto este script no hace nada
exit 0

Es decir el/los script/s han de ponerse en la línea anterior a: exit 0 ; se ejecutarán para todos los usuarios del sistema.
——————————-



No siempre queremos que un script se ejecute de forma manual, sino que aveces queremos que se ejecute a) en un determinado tiempo, día/s y hora/s,  o b) en un determinado momento durante el proceso del inicio del sistema o c) durante el proceso: salida de la sesión gráfica->pantalla de acceso->retorno a la sesión gráfica.

a) En el índice del blog, en la sección Tareas hay varios temas que explican como hacer que un script se ejecute de forma repetitiva o no, en un día/s y hora/s determinadas.

b) Este caso es el que se explica en este tema.

c) Este caso se explica en hacer que se ejecute un script durante el proceso: salida de la sesión gráfica -> pantalla de acceso -> retorno a la sesión gráfica.

---------------------------------

7 comentarios:

  1. Creo que te has comido una letra cuando hablas de dar permisos de ejecución a un archivo:

    chmod +x mi-script.sh

    Un post interesante :-)

    ResponderEliminar
  2. Gracias por leer el post, y por corregir la errata.
    Lo cambio ya mismo.

    ResponderEliminar
  3. Interesante :D pero la tercera opción cuando se hace con el init.d no se ejecuta como un demonio y cuando se realiza con el rc.local se ejecuta solo una vez como script al terminar de cargar el sistema 0.o?

    ResponderEliminar
  4. Me parece excelente estás intervenciones

    ResponderEliminar
  5. Hola me llamo Enrique y tengo linux mint 14. quería preguntarte como puedo hacer para que se abra automaticamente un documento Calc (de openoffice) no vacío y guardado con un nombre, cada vez que se inicie linux.
    gracias y un saludo

    ResponderEliminar
  6. Enrique:
    Añade un comando a "programas al inicio" de modo similar a:
    libreoffice3.6 --calc %U "/home/usuario/Escritorio/nombre-del-archivo.xls"

    comando correspondiente a open/libreoffice "dirección donde está el archivo"
    ( Pon la dirección del archivo entre comillas para que éste se abra aunque el nombre del archivo tenga espacios en su nombre)

    Suponiendo que la versión de libreoffice sea la 3.6 , y que el archivo este en el Escritorio.

    ResponderEliminar
  7. Hola hatteras
    Lo q pretendo es hacer un script que cada vez que arranque ubuntu restaure el /home/usuario previamente comprimido en un tar.gz y limpie todo lo hecho en la sesion.
    Como lo hago?
    El script debo hacerlo como root? Y darle todos los Permisos?
    Donde lo pongo en /etc/init.d?

    ResponderEliminar

A la vez que haces un comentario, por favor da una puntuación al tema: malo, normal, bueno o muy bueno.
Gracias.