Programar Tareas

From PostgreSQL wiki

Revision as of 05:50, 26 November 2009 by Ringerc (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Contents

Generalidad

Veremos como podemos configurar nuestro sistema operativo para realizar tareas periódicas de una manera muy cómoda. Tenemos dos mecanismos básicos para programar tareas:

 -.crontab: nos permite programar tareas que queremos repetir de forma periódica.
 -.at: nos permite realizar una tarea a una hora determinada pero sólo una vez.


Crontab

El comando crontab (cron) nos permite programar tareas y/o ejecutar comandos periódicamente a ciertas horas, ciertos días de la semana, del mes, del año, etc. Con este comando, cada administradorBD puede definir sus propias tareas programadas.

Sintaxis básica

   * crontab -l Mostrar las tareas programadas por el usuario.
   * crontab -e Editar el fichero crontab. Con esto editaremos el fichero de configuración de crontab de cada usuario para poder modificar las tareas programadas.
   * crontab -r Eliminar el fichero crontab corriente.
   * crontab -u <usuario> Aplicar una de las opciones anteriores para un usuario determinado. Sólo root puede hacerlo. 

El demonio cron ejecuta las instrucciones contenidas en:

   * el archivo /etc/crontab (tables for cron).
   * los archivos ubicados en el directorio /etc/cron.d
   * los archivos /var/spool/cron/crontabs/<usuario>

Editando nuestro fichero crontab

gilbertoc@gilbertoc:~$ crontab -e 

Contenido de un fichero crontab

Es similar a:

# m  h dom mon dow user command
 17  * *   *   *   root cd / && run-parts --report /etc/cron.hourly
 25  6 *   *   *   root cd / && run-parts --report /etc/cron.daily
 47  6 *   *   7   root cd / && run-parts --report /etc/cron.weekly
 52  6 1   *   *   root cd / && run-parts --report /etc/cron.monthly
 
# Hacer una copia de seguridad del directorio documentos cada día a las 00:00
 0   0 * * *            tar -czf docs-`date -I`.tar.gz ~/documentos/ 
 (el símbolo ~ es equivalente a $HOME, y a /home/usuario/)

# Hacer una copia de seguridad de la Base de datos cada día a las 07:30 y 21:30
 30  7  * *  1-5      /var/respaldos/scripts/mantenimiento_postgresql.sh
 30  21 * *  1-5      /var/respaldos/scripts/mantenimiento_postgresql.sh
  
   * m: minuto [0-59].
   * h: hora [0-23].
   * dom: día del mes [1-31].
   * mon: mes [1-12].
   * dow: día de la semana [0-7] (0 ó 7 es Domingo).
   * user: usuario.
   * command: comando.

A la hora de expresar los minutos, horas, días, meses y año, podemos utilizar listas: 3,23,43; rangos de tiempo: 1-5; pasos: 2-6/2 (= 2,4,6); y * (cualquier valor).

/etc/crontab contiene instrucciones para que cron ejecute los scripts de los directorios

   * /etc/cron.hourly
   * /etc/cron.daily
   * /etc/cron.weekly
   * /etc/cron.monthly

Agregando una línea para cada tarea que queramos programar. Podemos hacernos nuestros scripts y hacer que crontab los ejecute para tener tareas programadas más complejas.

En caso de necesitar reiniciar el servicio puede realizarlo:

gilbertoc@gilbertoc:~$ service crond restart
          O
gilbertoc@gilbertoc:~$ /etc/init.d/crond restart

At

Este comando nos permite ejecutar tareas a una cierta hora solamente una vez.

* <hora><dia> Para especificar la fecha por completo.
El parámetro <hora> es obligatorio. 
 Podemos ingresar valores de la forma 1800,18:00,0600pm, o bien uno de los 3 valores especiales: noon (mediodia), teatime (16:00) o midnight (00:00). 
El parámetro <dia> es opcional. 
 Podemos especificarlo de las siguientes maneras: 12/23/2005 (notación americana), 23.12.2005 (notación europea). 
 Podemos omitir el año, pero entonces sólo podemos usar la notación europea (por ejemplo: 23.12).
 También podemos especificar el mes abreviado como: Dec 23 o bien como 23 Dec. 

Especificaciones

* now + <intervalo> Donde intervalo es: <n> (minutos|horas|días|semanas|mes). 

Opciones

   * -l Para mostrar la lista de tareas que tenemos programadas.
   * -d <num_tarea> Para eliminar la tarea que queramos. Cada tarea tiene asociado un número que podemos ver con la opción anterior.

Ejemplo 1:

   $ at 5:30pm 

o bien

   $ at 17:30 

Una vez que hayamos ejecutado esto nos aparecerá el prompt de at para que introduzcamos nuestros comandos o tareas que queramos que se ejecuten a esa hora:

   at> gmessage "Comienza la salva de datos!!" 

Una vez hayamos terminado de introducir los comandos, presionaremos Control + D para salir de at.

Ejemplo 2:

Programar tareas para dentro de 3 horas:

$ at now + 3 hours
Personal tools