Menú

domingo, 7 de junio de 2015

Como hacer las conocidas "Tareas programadas" con Linux

En sistemas operativos basados en linux, las tareas programadas son gestionadas por un administrador de procesos en segundo plano llamado "cron". Cada usuario del sistema puede tener sus propios cron (tareas programadas) y se pueden configurar de diferentes formas.



Utilizando la propia aplicación crontab.


Escribiendo "crontab -e" en línea de comandos accederemos a un fichero en el cual podemos introducir nuestras "tareas programadas" (ahora explicaremos la sintaxis). Con este comando, solo podremos editar el cron del usuario con el que ejecutemos el comando.

Utilizando el sistema de directorios que ya tiene predefinido cron.


Esta es la forma más organizada de hacer nuestras tareas programadas, ya que podemos hacer distintos ficheros para tener los cron agrupados e identificados.

Los ficheros están estructurados así:

/etc/cron.d/
/etc/cron.daily/
/etc/cron.houly/
/etc/cron.monthly/
/etc/cron.weekly/

Como podéis observar, vienen predefinidas las carpetas daily, hourly, monthly y weekly. Estas son para que dentro estén los ficheros con los cron que se deben ejecutar cada hora, cada día, cada mes o cada semana respectivamente. En la carpeta /etc/cron.d/ introduciremos el resto de cron.

Para explicar la sintaxis, pondremos un ejemplo.

Suponemos que queremos que se ejecute el comando "sh /usr/bin/hacer_backup.sh"  todos los viernes a las 20:00 de la tarde para que se haga una copia de seguridad semanal de alguna aplicación.

Para esto, seguiríamos los siguientes pasos:

1. Creamos un fichero llamado backup dentro de la carpeta /etc/cron.daily/
       -> touch /etc/cron.daily/backup

2. Dentro del fichero, la sintaxis es la siguiente:


00 20 * * 5 root sh /usr/bin/hacer_backup.sh
 |    |  |  |  |     |                |__ comando a ejectuar
 |    |  |  |  |     |___________ usuario que lo debe ejectuar
 |    |  |  |  |_____________ dia de la semana (0 a 6 porque está en ingles)
 |    |  |  |_______________ mes (de 1 a 12)
 |    |  |_________________ día (de 1 a 31)
 |    |____________________ hora (de 00 a 23
 |_______________________ minutos (de 00 a 59)


Ponemos asteriscos cuando queremos indicar "cualquiera/todos", es decir. Nosotros queremos que se ejecute ese comando el minuto 00 de la hora 20, cualquier día del mes, cualquier mes pero SOLO el día 5 de la semana (el viernes).

Ponemos que * significa "cualquiera/todos" porque si hubieramos puesto 00 20 * * * sh .... se ejecutaría el comando TODOS los días a las 20:00 de la tarde. Como podeís comprobar, el 5 (día de la semana) condiciona los asteriscos anteriores.

Ahora, ¿Cómo configuramos un cron que ejecute el comando cada 5 minutos? ¿O cada 10 horas? Para configurar esto, la sintaxis del cron varía ligeramente. Simplmente, debemos escribir en el campo correspondiente */5 si queremos cada 5 minutos o */10 si queremos que se ejecute cada 10 horas. Ojo! cada uno hay que escribirlo en el campo que le corresponda, por ejemplo:


*/5 20 * * 5 sh /usr/bin/hacer_backup.sh


El comando se ejecutaría cada 5 minutos, dentro de la hora 20, solo los viernes, es decir:

El viernes a las 20:00 se ejecutaría la primera vez, a las 20:05, la segunda, 20:10 la tercera...y así hasta las 20:55 de ese viernes. Hasta el viernes siguiente, no se repetirá esta misma secuencia.


También podemos elegir que se ejecute solo en los minutos 08, 11,18 y 21 por ejemplo. Como veis, no responde a una secuencia de minutos lineal (no es cada 5 minutos, ni cada 10, si no que es en unos minutos concretos). Para hacer esto, pondríamos en el campo que corresponda (si son minutos, horas, días...) los números separados por comas, por ejemplo:

*/5 20 * * 1,2,5 sh /usr/bin/hacer_backup.sh

Este comando se ejecutaría los días lunes, martes y viernes, cada 5 minutos entre las 20:00 y las 21:00









No hay comentarios:

Publicar un comentario