Programar Tareas

From PostgreSQL wiki
Jump to navigationJump to search

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