miércoles, 15 de diciembre de 2010

Programar/Automatizar tareas repetitivas, con Gnome-Schedule

Imagina que quieres programar una tarea para que se ejecute periódicamente, en un determinado momento. Por ejemplo, para hacer que se ejecute el gestor de correos 3 veces al día, o para hacer una copia de seguridad de tus archivos el día 1 de cada mes, o cambiar el fondo de escritorio cada30 minutos, este tipo de tareas son Tareas Repetitivas. Para programar/automatizar tareas existe un programa gráfico: Gnome-Schedule ( también se puede hacer de otra forma, con la terminal: crontab-programar/automatizar-tareas , es conveniente leer éste tema para comprender mejor el tema actual). Una vez hallamos programado la tarea no hace falta que tengamos abierto el programa Gnome-Schedule, lo podemos cerrar, que aún así se ejecutará la tarea en el tiempo que hayamos programado, ya que este programa es la interfaz gráfica del comando crontab que se ejecutará en segundo plano.

Crear Tareas que se ejecuten repetidamente:

Con este programa podemos programar/automatizar la ejecución tanto de:  a) programas gráficos, b) scripts,  c) comandos.

Este programa gráfico es la interfaz gráfica del servicio cron, el cual lee un fichero -crontab - donde le indicamos las tareas y cuando las queremos realizar y él se encarga de ejecutarlas por nosotros en el preciso momento que le hayamos indicado en crontab , por lo que tenemos primero que:

Crear un archivo crontab para cada usuario que quiera usar este programa ( naturalmente hacemos esto desde cada sesión de un usuario ):

1-Primero creamos con gedit un archivo de texto, con el texto:
SHELL=/bin/bash
DISPLAY=:0
2-Guardas este archivo con el nombre: cron-usuario , en el directorio /home/usuario   ( Con cada usuario el archivo cron-usuario llevara el nombre del usuario )
3-En la terminal ejecutas: crontab cron-usuario ( luego si quieres ya puedes borrar el archivo de texto cron-usuario).

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

Inicio de Gnome-Schedule:

Una vez ejecutamos el programa, nos aparece la ventana principal del programa



desde la que podemos seleccionar el tipo de tarea programada: "tarea que se lanzará repetidamente"



A continuación se abre la ventana de Edición de la nueva tarea programada, desde la que vamos a crear una tarea que queremos que se ejecute repetidamente en un tiempo determinado.

== En Descripción: ponemos un nombre que nos diga lo que va a hacer la tarea.
== En Comando: ponemos lo siguiente para crear una tarea para ejecutar una de estas tres cosas:
-- un comando: hay que poner el comando, por ejemplo: tar cvf backup-firefox.tar /home/usuario/.mozilla
-- un script: hay que poner la ruta completa de donde esta el script: por ejemplo: /home/usuario/Scripts/copia-de-firefox
-- un programa gráfico: el nombre del ejecutable de un programa gráfico, por ejemplo: sylpheed

Editado ( 3-1-2011) : si para ejecutar un programa gráfico solo ponemos su ejecutable la tarea lanzará el programa con su interfaz en inglés, para que se lance el programa con la interfaz en español hay que poner: LANG=es_ES.utf8 ejecutable ; en el ejemplo, si como ejecutable ponemos: firefox, se ejecuta el programa en ingles, si ponemos: LANG=es_ES.utf8 sylpheed , si que se ejecuta el programa en español.

Editado (6-1-2011): Para los que vivan fuera de España escribir en un terminal:  set | grep LANG
Saldrá por ejemplo LANG=es_AR.utf8 para los que vivan en Argentina.
usuario@mint ~ $ set | grep LANG
GDM_LANG=es_AR.utf8
LANG=es_AR.utf8
usuario@mint ~ $

En el ejemplo habría que poner, si vives en Argentina,  LANG=es_AR.utf8 sylpheed  . El idioma que aparece al ejecutar el comando varia en función de la lenguna ( o la variante del Español ) en la que iniciemos el sistema.

== En Comportamiento: se puede elegir entre:
-- Comportamiento predeterminado: para un programa gráfico
-- Suprimir salida: si se ejecuta de forma automática sin necesidad de que intervenga para nada el usuario.
-- Aplicación X: para un comando o script en el que se necesite contestar en la terminal
-- Aplicación X: suprimir salida: para un comando o script en el que no se necesite contestar en la terminal, sino que se ejecute de forma automática.



== En Hora y Fecha Básico: podemos elegir entre las opciones: ejecutar  "cada minuto", "cada hora", "cada día", "cada mes", "cada semana",, "al reiniciar"

== En Hora y Fecha Avanzado: podemos especificar mucho mas cuando queremos que se ejecute la tarea, para ello debemos saber como "Editar los Campos de Tiempo"

Edición de los Campos de Tiempo: los editaremos a nuestro gusto, con clíck en los botones Editar del campo que queramos editar, en la siguiente ventana,  según indico a continuación.



El valor que puede tomar cada campo es como sigue:

- minutos: va de 0 a 59 y representa el minuto en que se ejecuta
- horas: va de 0 a 23 y representa la hora en que se ejecuta
- día: va de 1 a 31 y es el día del mes en que se ejecuta
- mes: va de 1 a 12 y representa el mes que se ejecuta
- día de la semana: va de 0 a 7 y el el día de la semana en que se ejecuta (el domingo se puede indicar con el 0 o con el 7, el lunes es 1, martes 2, etc)
Con un asterisco * se indica todo es decir todos los minutos, o todos los meses, o todos los días.
‎También se admiten rangos en los campos:
un guión - significa: 0-15 -> intervalo de valores: todos los valores de 0 hasta 15
una coma , indica: 15,30,45 -> valores únicos, solo esos tres valores: 15, 30 y 45
una barra / indica: 1-10/2 -> un incremento de valores: valores en incremento de 2 en 2 , empezando desde 1, es decir: 1,3,5,7,9

——————-

Ejemplos de Campos de Tiempo: ( se omite el comando que se ejecutaría siguiendo las instrucciones dadas por los campos de tiempo anteriores a él ):

0 1 * * * *    Se ejecuta al minuto 1 de cada hora de todos los días
15 8 * * *    A las 8:15 a.m. de cada día
15 20 * * *    A las 8:15 p.m. de cada día
00 5 * * 0    A las 5 a.m. todos los Domingos
* 5 * * 0    Cada minuto de 5:00a.m. a 5:59 a.m. todos los Domingos
45 19 1 * *    A las 7:45 p.m. del primero de cada mes
01 * 20 7 *    Al minuto 1 de cada hora del 20 de Julio
10 1 * 12 1    A la 1:10 a.m. todos los lunes de Diciembre
00 12 16 * 3    A las 12h de los días 16 de cada mes y que sea Miércoles
30 9 20 7 4    A las 9:30 a.m. del dia 20 de Julio y que sea Jueves
30 9 20 7 *    A las 9:30 a.m. del 20 de Julio de cualquier día de la semana
20 * * * 6    Al minuto 20 de cada hora de los Sábados
20 * * 1 6    Al minuto 20 de cada hora de los Sábados de Enero
——————–
–   59 11 * 1-3 1,2,3,4,5    A las 11:59 de Lunes a Viernes, de Enero a Marzo
–  45 * 10-25 * 6-7    Al minuto 45 de todas las horas de los días 10 al 25 de todos los meses y que el día sea Sábado o Domingo
–  10,30,50 * * * 1,3,5    En el minuto 10, 30 y 50 de todas las horas de los días Lunes, Miércoles y Viernes
–  */15 10-14 * * *    Cada quince minutos de las 10:00a.m. a las 2:00p.m.
–  * 12 1-10/2 2,8 *    Todos los minutos de las 12h, en los días 1,3,5,7 y 9 de Febrero y Agosto. (El incremento en el tercer campo es de 2 y comienza a partir del 1)
–  0 */5 1-10,15,20-23 * 3    Cada 5 horas de los días 1 al 10, el día 15 y del día 20 al 23 de cada mes y que el día sea Miércoles
–  3/3 2/4 2 2 2    Cada 3 minutos empezando por el minuto 3 (3,6,9, etc.) de las horas 2,6,10, etc (cada 4 horas empezando en la hora 2) del día 2 de Febrero y que sea Martes

Podemos programar tareas que se ejecuten cada hora, o cierto día del mes, o todos los meses, o todos los días, o solo los Sábados, o Miércoles, etc. Todo depende de la combinación de valores que pongas en esos campos.

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

Gnome-Schedule con permisos de root: El programa Gnome-Schedule se puede usar también con permisos de root, si queremos que las tareas las realice el root, ejecutando: sudo gnome-schedule; Si queremos que se ejecute un script o comando que en su sintaxis lleva el comando sudo, es decir que necesita permisos de root para ejecutarse, tendremos que usar Gnome-Schedule con permisos de root para ejecutar dicha tarea.

Desde el programa Gnome-Schedule del usuario ( y de cada usuario si hay varios  ) y desde el del root, se accede cada uno a sus propias tareas. Desde el Gnome-Schedule ejecutado con permisos de root se puede acceder  ( y modificar )   a las tareas de cada uno de los usuarios que tengamos en el sistema, a través de una nueva opción (cambiar de usuario ) que aparece en la barra de herramientas del programa.


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

9 comentarios:

  1. He creado dos tareas con gnome-schedule para que a determinadas horas se ejecuten los programas sylpheed (administrador de correo) y osmo (agenda, calendario,notas,contactos). Pues el asunto es que si ejecuto manualmente esos programas desde el menú de aplicaciones se ejecutan con su interfaz en español, pero cuando se ejecutan de forma automática con gnome-schedule lo hacen con la interfaz gráfica en ingles. ¿ Alguna idea de como solucionar este pequeño "problema" ?

    Si creo la tarea en vez de con gnome-schedule con la terminal y el comando crontab -e también pasa lo mismo: se ejecuta con la interfaz en ingles.

    ResponderEliminar
  2. Después de leer la contestación de http://www.guadalinex.org/participa/foros/hilo/20844 tenia la duda si la solución seria:
    LANG=es_ES.UTF-8 sylpheed
    o
    sylpheed LANG=es_ES.UTF-8
    He probado ambas soluciones, y la que funciona es:
    LANG=es_ES.UTF-8 sylpheed
    Con el otro programa también funciona: LANG=es_ES.UTF-8 osmo
    Tema solucionado, ya me salen ambos programas en español en el programador de tareas gnome-schedule.

    ResponderEliminar
  3. Miguelk3b me ha informado de que:
    Para los que vivan fuera de España escribir en un terminal:

    miguel@ubuntu:~$ set | grep LANG
    GDM_LANG=es_ES.utf8
    LANG=es_ES.utf8
    miguel@ubuntu:~$

    Saldrá por ejemplo LANG=es_AR para los que vivan en Argentina.

    ResponderEliminar
  4. [...] Automatizar tareas. Para tal fín utilizo Gnome-schedule para mejorar mi productividad diaria con el ordenador y mantenerme [...]

    ResponderEliminar
  5. Hola hatteras, ¡¡¡¡excelente tu tutorial!!!. Me gustaria preguntarte un par de cosillas.. Resulta que gasto Linux Mint 13 Mate 64 bits y por lo visto, tras mucho investigar, me he dado cuenta que el icono mintUpdate siempre dice que esta actualizado aunque haya actualizaciones para instalar, para que detecte las actualizaciones tienes que pinchar en el icono y poner la contraseña y lanzar el gestor de actualizaciones como administrador. El propio fundador de linux Mint un tal Clem así lo confirma:

    http://forums.linuxmint.com/viewtopic.php?f=34&t=69859
    "
    Well, it all comes down to one thing and one thing only: You need to refresh your APT cache to see if there are "new" updates. For this, you need to elevate yourself to root.

    When you click on mintupdate, it launches itself in root mode, and that's why it asks for a password. When you type "apt update" (which is the same as "sudo apt-get update"), you're asked for a password too.. as you're elevating yourself as root to refresh the cache. Either way, you're refreshing your cache when you do that.

    What's important to realise here, is that mintUpdate isn't designed to "alert" you in "real time". It's not a server admin tool to keep your box up to date "the minute" something is released in the repositories. Its primary function is to make it easy for people to upgrade and to prevent novice users from upgrading sensitive parts of their system (via the level system).

    Note however, that if you wanted mintUpdate to find updates and alert you in real time, all you'd have to do is to create a cron job that regularly calls "apt update". This would refresh the cache for you in the background and mintUpdate would then be able to find new updates, whether it's in root mode or user mode. "

    "

    Bueno después de esta pequeña introducción voy al grano, resulta que si hacemos en la terminal sudo apt-get update el icono si que reconoce que hay actualizaciones por lo tanto me gustaría realizar una tarea repetitiva con gnome-schudule con el comando sudo apt-get update, mi duda es en comportamiento que opción elegir...A simple vista seria esta ¿Aplicación X: suprimir salida ?..

    Saludos ....

    ResponderEliminar
  6. Hectorsales:
    Gracias por tu aportación.
    Si, yo también creo que la opción que hay que poner en "comportamiento" es la de "aplicación x: suprimir salida"

    ResponderEliminar
  7. Un par de cosillas más hatteras, cuando el comando que quieras utilizar lleva el sudo delante en mi caso sudo apt-get update hay que lanzar gnome-schudule como root pero según tengo entendido no hay que poner sudo si no gksudo gnome-schudule, ya que es una interfaz gráfica. Por otra parte me gustaría preguntarte si al programar la tarea, esta se ejecuta automáticamente al iniciar el sistema. por ejemplo si quiero que sudo apt-get update se ejecute cada 1h 50 minutos, si apago el ordenador la tarea se inicia automáticamente ....

    ResponderEliminar
  8. hectorsales:
    -- Si lo que quieres es que el comando o script se inicie al iniciar el sistema: http://hatteras.wordpress.com/2012/06/06/hacer-que-se-ejecute-un-script-en-el-inicio-del-sistema/
    -- Si quieres que se inicie el script al iniciar la sesión, añádelo a "Programas al inicio" : gnome-session-properties
    -- Si quieres que se use en una determinada hora, o cada xx minutos, hazlo desde gnome-schedule, o con el comando crontab: http://hatteras.wordpress.com/2010/12/02/crontab-programarautomatizar-tareas/.

    ResponderEliminar
  9. Muy bien totalmente aclarado ... Gracias

    ResponderEliminar

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