Cron: Automatizando tareas en linux

En esta nueva práctica presentaremos a cron que es el programador de tareas de Linux.

El demonio crond se encarga de leer y ejecutar el fichero /etc/crontab.

Este fichero tiene una estructura como la siguiente

MINUTO HORA DIA MES MES DIA SEMA USUARIO ACCION

Si nosotros ponemos en cada apartado lo que nos interese, tendremos como resultado una fecha en la que se realiza una acción de manera repetitiva o no si solo se quiere que se repita una vez.

Podremos usar números para cada lugar de fechas, es decir para los minutos podremos especificar valores desde 0 a 59. En las horas de 0 a 23. Los meses irán desde el 1 al 12, lo días de la semana de 1 a 31 y para los días de la semana de 0-7, siendo el lunes el día 1 y el domingo el 0 o 7. Podremos utilizar valores como asterisco * si queremos especificar que se haga todos los días, todos los meses….

Tendremos que tener especial cuidado en este fichero ya que son tabuladores los que separan una información de otra.

Para que se vea que sabemos utilizar este fichero realizaremos un par de prácticas. Vamos a escribir en un fichero de texto que “Funcionaaa!!! La semana que viene no”. He entendido que esto se realizara solamente durante este mes.

Tras revisar el horario de Linux de febrero y de marzo, no me gustan mucho ninguno así que escribiremos la línea necesaria para que se hagan en febrero y en marzo.

En febrero tenemos clase lo días 6, 12,20 y 23. El día 6 y el día 20 tenemos clase de 11.15 y a 13.15, ambos días son sábados.

La tabla de cron debería de quedar de la siguiente manera

MINUTO HORA DIA MES MES DIA SEMA USUARIO ACCION
15 11-13 6,20 2 6 Root Echo……

Realmente seria:

15 11-13 2 6,20 6 root date>>/var/log/milog; echo “Tenemos clase d Linux y la semana que viene no aparecerá este mensaje”>>/var/log/milog.

Con esta línea nos debería de escribir en el fichero milog la fecha y el mensaje a las 11.15 a las 12.15 y a las 13.15 de los días 6 y 20 de febrero. De esta manera cumpliremos el enunciado en el mes de febrero. Probémoslo

Como podemos observar nuestro fichero crontab quedara de la manera que vemos en la imagen inferior, recordemos que para editar crontab tenemos que escribir en la Shell nano /etc/crontab y tener privilegios de root.

clip_image002

Una vez editado el fichero, lo guardaremos.

Como ya hemos pasado el día 6 y el día 20 de febrero, no podríamos hacerlo pero vamos a jugar con el sistema, vamos a cambiarle la hora para reproducir el efecto que debería de tener.

Escribiremos en la Shell date –set “2010-2-6 11:14 AM”

clip_image004

De esta manera le estamos diciendo al sistema que la fecha actual es el 6 de febrero de 2010 y son las 11: 14 de la mañana. Si escribimos date en la Shell veremos la fecha exactamente.

clip_image006

Ahora solo tenemos que esperar a que sean y 15, a esta hora se escribirá una línea en el fichero indicado. No tendría que volverá escribir otra línea hasta las 12:15 y una última a las 13:15, esta tarea programada volvería a tener éxito el día 20, mientras que el día 12 no haría nada.

Vamos a comprobarlo, ya hemos dejado que pase un rato, así que para que se vea que no hay trampa ni cartón, lo primero que vamos a ver es la hora. Escribiremos date en la Shell

clip_image008

Como podemos ver son 11:18 y ya deberíamos de tener una línea escrita en nuestro fichero, una tan solo.

Para ver nuestro fichero haremos cat /var/log/milog

clip_image010

clip_image012

Si fuesen las 12 y cuarto volvería a meter otra línea, si son las 13 y cuarto metería otra. La próxima inserción seria el día 20 a las 11 y 15, veamos algunos ejemplos de ello.

Cambiaremos la fecha y ahora serán las 12 y 14 para ello haremos:

Date – – set “ 2010-2-6 12:14 AM”

clip_image014

Cuando sean y 15 deberíamos de tener una línea más en nuestro fichero.

clip_image016

Para las 13:15 sería lo mismo.

Vamos a cambiar de nuevo la hora para ver si el día 20 de febrero no funciona el tema

Date – – set “2010-2-6 11:14 AM”

clip_image018

Como ya sabemos debería de introducir otra línea en este fichero.

clip_image020

Parece que funciona correctamente.

La misma tarea que antes para el mes de Marzo con el calendario actual de clases de Linux debería de ser el siguiente:

MINUTO HORA DIA MES MES DIA SEMA USUARIO ACCION
00 17-19 5 3 5 Root Echo……
15 11-13 27 3 6 Root Echo……

Como podemos observar en marzo tenemos clase 2 días así que realizamos 2 programaciones porque no coinciden en nada. De esta manera nos aseguramos que solo el día 5 y el 27 a cada hora de clase se enviara un mensaje a /var/log/milog

Nuestro fichero crontab que lo editamos mediante nano /etc/crontab, debería de quedar asi

clip_image022

De esta manera haremos que los días 5 y 27 de marzo, viernes y sábado respectivamente a las 17:00,18:00 y 19:00 ese viernes y que el sábado 27 a las 11:15,12:15 y 13:15 muestre una línea en el fichero que hemos puesto.

Hemos modificado la fecha a dia 5 de marzo a las 16:59 para ver si realmente a las 17.00 nos mete una línea en ese fichero,veamoslo.

clip_image024

clip_image026

clip_image028

Vemos que funciona perfectamente, ahora probaremos a ver si funciona para el dia 27 a las 12:15, para ello haremos date –set “2010-3-27 12:14 AM” y esperaremos, comprobaremos si funciona en un instante

clip_image030

clip_image032

clip_image034

Parece que funciona perfectamente.

Vamos a realizar una última cosilla, si nosotros en los minutos ponemos que queremos que salga un minuto si un minuto no tendremos que cambiar el 00 de la penúltima línea del fichero crontab, como ejemplo, por */2. De esta manera nos sacara cada 2 minutos una línea desde las 17:00 hasta las 19:00 del viernes 5 de marzo.

Vamos a realizar el cambio en el crontab y la línea nos debería de quedar como vemos en la imagen inferior

clip_image036

Y además cambiamos la fecha de nuevo como vemos en la imagen

clip_image038

Deberían de aparecernos en nuestro fichero de log 4 líneas. Después de las 19:00 no mostrara nada más. Esperemos un momento para ver si salen….

clip_image040

Como podemos ver salen mas, es normal, tendríamos que haber puesto las horas de 17-18 ya que hara todos los minutos hasta las 18:59 y el de las 19.00 no saldrá porque habremos acabado la clase. Vamos a probarlo.

clip_image042

Volveremos a ponerlo en hora

clip_image043

Hemos dejado que pase un rato, realizamos un date para comprobar la hora,

clip_image045

Vemos que se han pasado las 19 horas

Veamos ahora nuestro fichero de log

clip_image047

Parece que ahora si ha funcionado como nosotros queríamos. La programación de tareas podemos complicarla todo lo que queramos, no tenemos más que pensar que queremos hacer y cuando.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Time limit is exhausted. Please reload the CAPTCHA.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.