03 – Crontab, uno de tus mejore amigos

Automatiza tareas con crontab

Un ingenios@ de sistemas se enfrenta a muchas tareas que tiene que ejecutar de manera periódica. En el momento que tengas un sistema en marcha, hay tareas, como copias de seguridad, que debes realizar si no quieres tener disgustos y ten por seguro que si no las haces los vas a tener. Es una de las grandes verdades de la tecnología, sustos, vas a tener.

Cuantos más sistemas tienes, más numerosas son las tareas que debes realizar, algunos de las aplicaciones como WordPress y muchas otras, tienen módulos que facilitan estas tareas, como las copias de seguridad y las actualizaciones, pero cuando los plugin tienen opciones interesantes, que realmente quitan trabajo, suelen ser de pago, y nuestro objetivo es hacer todo con el menor coste posible, por lo que el tema de las tareas lo automatizamos siempre que podamos, sin coste

La buena noticia es que los sistemas Linux disponen de una herramienta llamada cron, que es un programador de tareas y que se encarga de ejecutar líneas de comando escritas en el fichero o crontab, a horas y días determinados, de una forma recurrente, lo cual resulta realmente útil.

Cómo funciona Crontab

La herramienta cron o crontab, fue desarrollada por Brian Kernighan en 1979 y se basaba en un algoritmo tan sencillo y que funciona tan bien, que se ha mantenido hasta nuestros días,

algoritmo base para crontab
algoritmo base del cron

Así de sencillo, comprobar cada minuto si hay algún comando o script de comandos que deba ejecutarse. Tan sencillo como eficiente, estas suelen ser las soluciones más ingeniosas, hay que tener en cuenta que linux es un sistema operativo en tiempo real y también es un sistema multiusuario, así que este herramienta debe realizar esta comprobación para cada usuario, incluido root.

El nombre de la herramienta es CRON, pero como los datos de tareas a ejecutar se escriben en un fichero que se llama crontab, este programador de tareas también se conoce como crontab.

Programando tareas cron

La implementación de tareas es muy sencilla, se edita el fichero /usr/etc/crontab y se pone una línea de texto por cada tarea que se quiera ejecutar, en esa línea de texto hay que poner unos valores numéricos. El comando en si, va precedido por 5 posiciones que corresponden de izquierda a derecha a:

(Minuto) (Hora) (día del mes 1- 31) (mes 1-12) (dia de la semana 0-6) comando o script de comandos.

En aquella posición en la que usemos un *, quiere decir que es cada unidad, por ejemplo 5 * * * * significa que es en el minuto 5 de cada hora, de cada día del mes de cada mes de cada día de la semana.

Si quisiéramos especificar que la tarea se ejecuta cada 5 minutos, lo haríamos así, */5 * * * *. En la primera posición, en la de los minutos usamos el signo de dividir para separar el * de la frecuencia y esto quiere decir que se ejecuta cada minutos.

Veamos otro ejemplo, * 1 * * * quiere decir a las 1 de la madrugada, mientras que * */1 * * * quiere decir cada hora.

Si queremos hacer una tarea el dia 1 de cada mes a las 22:30 de la noche, solo tendremos que usar 30 22 1 * *

Si quieres una tarea a las 6 de la tarde de lunes a viernes, seria 0 18 * * 1-5, el Lunes es dia 1 ya que el domingo es el 0, 0 y 6 serian Sábado y Domingo.

Te dejo una relación completa de ejemplos de programación cron en este snippet.

Ahora piensa en la comodidad de las tareas que tienes que realizar normalmente a mano, aprenderás pronto a combinar esta utilidad con algún script de comandos que te ayuda a hacer copias de seguridad, copiar esos respaldos a otros servidores, actualizar el certificado SSL de tus dominios, tareas de mantenimiento del propio servidor.

Bien utilizado puede hacer copias de tus bases de datos, mantenimiento de ficheros en tu servidor para no acumular mucha basura

Resumen:

Cron es una utilidad que se ejecuta en segundo plano en tu sistema operativo Linux y que dependiendo de la distribución que tengas, va a ejecutar /etc/rc.d o /etc/init.d y que revisa cada minuto si hay tareas a ejecutar en este fichero /etc/crontab o /var/spool/cron (tambien depende de la distribución de Linux).

Las tareas dentro de este fichero deben seguir un patrón con 5 posiciones numéricas que determinan el minuto, hora, dia del mes, mes y dia de la semana. * * * * * seguidos del comando o el script a ejecutar

Sustituir los asteriscos por los valores numéricos correspondiente al dia y hora en que quieres ejecutar la tarea.

Que tengas un ingenioso día.

Deja un comentario