Tengo ciertas tareas que suelo ejecutar al inicio de cada sesión, periódicamente o solo cuando me acuerdo de ejecutarlas (aunque mi intención sea ejecutarlas todos los días). Por ejemplo: ejecutar redshift cada vez que inicio sesión, comprobar si hay novedades en alguna página concreta cada día o hacer copias de seguridad o imágenes de disco periódicas.
En realidad periódicas, en mi caso, quiere decir cuando veo que algo puede salir tan mal que me quede sin poder utilizar el ordenador con normalidad o cuando ya ha pasado.
Así que, con el fin de ahorrar tiempo repitiendo comandos o evitar que se me olvide hacer algo, voy a hacer este pequeño tutorial con varias formas de hacer que sean los duendecillos de dentro del ordenador los que trabajen por mi.

Vamos a diferenciar entre ejecutar aplicaciones con las que vamos a interactuar y trabajos que se van a ejecutar en segundo plano.

Cómo ejecutar aplicaciones con las que vamos a interactuar

En mi caso quería ejecutar un script que compilase y ejecutase una aplicación Java y que me mostrase el resultado cada vez que iniciase sesión. Mi problema era que casi todos los posts y preguntas que había encontrado intentaban solucionarlo programando tareas en cron pero resulta que cron solo sirve para ejecutar trabajos en segundo plano.

La única solución que he conseguido hacer funcionar ha resultado ser también la más sencilla. A través de Startup Applications o Autoarranque (en castellano). Podemos encontrar esta opción tecleando autoarranque en el menú de aplicaciones:

autoarranque

Entramos a la interfaz gráfica de Autoarranque:

autoarranque2

Y desde aquí podemos elegir añadir un programa, donde elegiremos una aplicación dentro del menú de aplicaciones o añadir un script donde elegiremos un script que ejecutar. También podemos hacerlo a mano, creando un archivo .desktop para cada aplicación o un symlink para cada script.
Ejemplo de archivo script.desktop. Hay que crearlo en /home/usuario/.config/autostart/

Este archivo ejecutará el script scr.sh, pero podemos sustituirlo por el comando que arranque la aplicación que queramos.
Para crear un symlink:

Cómo ejecutar aplicaciones en segundo plano

Opción 1, agregar tareas a crontab

Lo más sencillo, es agregar el comando o script a la lista crontab, para que sea cron el que ejecute los comandos cuando nosotros queramos.
Podemos añadir una nueva linea al documento con el siguiente comando  crontab -e siguiendo esta estructura:

  • m se refiere al minuto de cada hora. Valores entre 0 y 59. Si ponemos * se ejecuta cada minuto
  • h es la hora de ejecución con formato 24 horas. Valores entre 0 (12 de la noche) y 23. Con * se ejecuta cada hora.
  • dom es el número de día de cada mes en el que se va a ejecutar. Entre 1 y 31. Con * se ejecuta cada día.
  • mon es el número de cada mes. Tiene valores entre 1 y 12 y si ponemos * se ejecuta cada mes.
  • dow es el nombre del día en el que queremos que se ejecute. Los valores son las 3 primeras letras de los días en inglés mon, tue, wed, thu, fri, sat, sun.
  • user es el usuario que va a ejecutar el comando o script, siempre y cuando tenga permiso.
  • command se refiere al comando o al script (con ruta absoluta) que queremos ejecutar

Unos ejemplos:

Queremos que cada viernes 13 a las 23:00 ejecute el script noTeVayasALaCama.sh

Queremos que el día 5 de cada mes a las 13:00 ejecute el script aVerSiHeCobrado.sh

También podemos hacer que se ejecute cada vez que se inicia el ordenador del siguiente modo:

Puedes visitar este post si quieres saber más sobre Cron y Crontab.

Opción 2, añadir la tarea a rc.local

Para esto necesitamos:

  • Que el script sea ejecutable.Si no lo es, ejecutamos: sudo chmod +x nombredelscript
  • Añade el script a rc.local: sudo nano /etc/rc.local antes de exit 0. Debería ser como este.

    La etiqueta “-e” va a hacer que si se ejecutan varias funciones y falla una, el resto no se ejecuten, por lo que habrá que investigar más a fondo. Si no te funciona y no sabes por donde empezar, puedes consultar esta pregunta de askubuntu.com.

Opción 3, añadir la tarea en el archivo init.d

Para mi la más complicada. Se va a ejecutar a la vez que otros servicios del sistema, por lo que se puede complicar si necesitamos ejecutar programas que todavía no han arrancado. Conviene además entender algo sobre los runlevels:

  • Que el script sea ejecutable.Si no lo es, ejecutamos: sudo chmod +x nombredelscript
  • Copiar el script en la carpeta /etc/init.d/
  • Ejecutar el siguiente comando: sudo update-rc.d script.sh defaults para añadir enlace del script en las carpetas rc.d. (rc viene de run command). Si quieres saber bien como funciona este comando puedes consultar el manual.
    Nota: Yo tuve problemas porque no añadí las etiquetas LSB al script. Si quieres saber más, puedes mirar aquí.

 

Fuentes:

Explicaciones sobre los RunLevels y como ejecutar automáticamente tu software al iniciar.

Manpage sobre update-rc.d

Askubuntu.com

Blog.desdelinux.net

 

Sobre El Autor

Economista reconvertido a programador. Hoy en día trabajo como Desarrollador de aplicaciones web y móvil con Node.js, Angular.js (MEAN Stack) e Ionic framework. También intento mantenerme al día de lo que se mueve en este mundillo y mantengo este pequeño blog como documentación personal. Si echas algo de menos en el blog no dudes en comentar, y si te ha resultado de utilidad algún artículo, te agradezco que lo agradezcas ;-). ¡Un saludo!

Artículos Relacionados

Hacer Comentario

Su dirección de correo electrónico no será publicada.