En el mundo de los servidores hay mil y una tareas que se realizan a diario, como copias de seguridad nocturnas, chequeo de sistemas, envío de alertas por email… cualquier cosa que se nos pase por la cabeza. Pero claro, un programa no puede ejecutarse solo. Para que todos esos procesos se lancen en el momento esperado, es necesario que, o bien se encuentren todo el tiempo activos, en estado wait (a la espera) hasta que llegue el momento de «despertarse» (solución poco óptima), o que los lance otro proceso.
Una de las cosas que hace extremadamente bien Linux es automatizar tareas, y para ello cuenta con cron, que es un demonio (programa que se ejecuta continuamente en backgroundo segundo plano, normalmente al arrancar el sistema) que se ejecuta cada minuto y mira si tiene que lanzar algún otro proceso. En esta entrada hablaremos de cómo configurar cron.
Cron dispone de una lista, crontab, que contiene los procesos que tiene que ejecutar para cada usuario. Editando esta lista le diremos al demonio cuándo y qué tiene que ejecutar. Veamos qué contiene esa lista:
javi@asus:~$ crontab -l # m h dom mon dow command
Por defecto, está vacía y solo contiene una línea, que al empezar por «#» indica que es un comentario, es decir, que no se ejecutará. Pero nos da información de como tenemos que rellenar el archivo que conforma la lista. Como podemos apreciar, se divide en 6 campos separados por un espacio: m, h, dom, mon, dow y command, y cuyo significado es el siguiente:
m | Minuto. Determina en qué minuto de la hora será ejecutado el comando. Este valor estará entre 0 y 59. |
h | Hora. Controla la hora del día en que se ejecutará el comando. Este valor estará entre 0 y 23, siendo 0 medianoche. |
dom | Día del mes a ejecutar el comando. Si ponemos aquí un 10, el comando se ejecutará solamente los días 10 de cada mes establecido, a la hora y minuto establecidos. |
mon | Mes. Especificaremos qué mes queremos que se ejecute el comando. |
dow | Día de la semana. De 0 a 7, donde 0 es domingo, 1 es lunes… 6 es sábado y 7 otra vez domingo. Semana anglosajona: de 0 a 6. Nuestra semana: 1 a 7. |
command | El comando a ejecutar. Como comando se entiende cualquier comando, programa o script que podamos escribir en la línea de comandos. |
Puede haber un campo más, entre el día de la semana y el comando, que hace referencia alusuario que ejecutará éste.
A la hora de introducir valores no se nos limita solamente a poner un número dentro del rango permitido para cada campo, también permite intruducir listas de valores, múltiplos o el símbolo «*», que quiere decir «todos». Por ejemplo, si en las horas ponemos un 5, se ejecutará a las 5 de la mañana. Si ponemos 5,8,15 se ejecutará a las 5 a las 8 y a las 15 horas. Si ponemos 5-9, se ejecutará cada hora desde las 5 hasta las 9. Si ponemos el símbolo «*» se ejecutará a cualquier hora, todas las horas. Y si ponemos por ejemplo */6 se ejecutará todas las horas múltiplos de 6, es decir, cada 6 horas.
A continuación vamos a ver algunos ejemplos:
30 12 * * * | Cada día del año a las 12:30 |
0 22 * * 6 | Todos los domingos del año a las 22:00 |
0 */8 * * 1-5 | Cada 8 horas (en punto), de lunes a viernes. |
0 */8 * * 1-5 | Cada 8 horas (en punto), de lunes a viernes. |
0 0 * 1-3 1,5,6 | Todos los lunes, viernes y sábados a medianoche desde enero hasta marzo. |
Creo que con estos ejemplos queda bastante claro el uso de cron. Es importante darse cuenta que deben cumplirse todas las condiciones que pongamos.
Otra manera de ejecutar Cron
Si nos da pereza editar el archivo crontab, existe otra manera de utilizar cron, quizá más sencilla, pero que obliga a tener nuestros scripts «desparramados» por el sistema.
Si echamos un ojo a la carpeta /etc, veremos algunas subcarpetas de interés:
/cron.daily /etc/cron.hourly /etc/cron.monthly /etc/cron.weekly
Si situamos un archivo tipo script en alguna de esas carpetas, se ejecutará diariamente, cada hora, cada mes o cada semana, según en qué carpeta sea. El archivo debe ser parecido a ésto:
#!/bin/sh echo "Hola" | mail -s "Esto es una prueba" midireccion@decorreo.com
Éste archivo nos enviará un email según cuando lo dicte la carpeta donde lo hayamos dejado.
Con ésto queda claro cómo utilizar Cron, al menos básicamente. Espero os sirva de ayuda!