Crontab – automatización de tareas

¿Qué es cron?

En el sistema operativo Unix, cron es un administrador regular de procesos en segundo plano (demonio) que ejecuta procesos o guiones a intervalos regulares (por ejemplo, cada minuto, día, semana o mes). Los procesos que deben ejecutarse y la hora en la que deben hacerlo se especifican en el fichero crontab.

Cómo funciona

El demonio cron inicia de /etc/rc.d/ o /etc/init.d dependiendo de la distribucion. Cron se ejecuta en el background, revisa cada minuto la tabla de tareas crontab /etc/crontab o en /var/spool/cron en búsqueda de tareas que se deban cumplir. Como usuario podemos agregar comandos o scripts con tareas a cron para automatizar algunos procesos. Esto es util por ejemplo para automatizar la actualizacion de un sistema, ejecutar un script que tenemos para contabilizar cualquier asunto o bien para avisarnos periodicamente del estado de algún servicio en nuestro servidor Linux.

¿Cómo puedo automatizar alguna tarea?

Tenemos 2 opciones para esto:

  • Con un script hechos por nosotros el cual queremos ejecutar. En este caso bastará con escribir nuestro script en bash, c, perl… y luego darle permisos de ejecución:

 #chmod +x miscript.sh

Luego lo añadiremos a nuestro crontab, apartado que veremos luego.

  • Script de alguna aplicación php (WordPress. Moodle..) la cual queremos que se ejecute periodicamente. En este caso bastará con poner el comando en nuestro crontab, cosa que veremos más adelante.

Ahora ya tenemos nuestro script o fichero listo para ser añadido al crontab, ¡bien!… ¿Pero como se añade?

Ejecutamos la edición del crontab con crontab -e, en algunas distros (como debian) nos da la opcion de elegir el editor de textos que deseemos, los demás nos quedamos con vi, en otros casos podremos hacer vim /etc/crontab. El archivo crontab lucirá algo asi.

# m h dom mon dow user command

donde:

  • m corresponde al minuto en que se va a ejecutar el script, el valor va de 0 a 59
  • h la hora exacta, se maneja el formato de 24 horas, los valores van de 0 a 23, siendo 0 las 12:00 de la medianoche.
  • dom hace referencia al día del mes, por ejemplo se puede especificar 15 si se quiere ejecutar cada dia 15
  • dow significa el día de la semana, puede ser numérico (0 a 7, donde 0 y 7 son domingo) o las 3 primeras letras del día en inglés: mon, tue, wed, thu, fri, sat, sun.
  • user define el usuario que va a ejecutar el comando, puede ser root, u otro usuario diferente siempre y cuando tenga permisos de ejecución del script.
  • command refiere al comando o a la ruta absoluta del script a ejecutar, ejemplo: /home/usuario/scripts/actualizar.sh, si acaso llama a un script este debe ser ejecutable

Para que quedara claro unos cuantos ejemplos de tareas de cron explicados:

15 10 * * * usuario /home/usuario/scripts/actualizar.sh

Ejecutará el script actualizar.sh a las 10:15 a.m. todos los días

15 22 * * * usuario /home/usuario/scripts/actualizar.sh

Ejecutará el script actualizar.sh a las 10:15 p.m. todos los días

00 10 * * 0 root apt-get -y update Usuario root

Ejecutará una actualización todos los domingos a las 10:00 a.m

45 10 * * sun root apt-get -y update

Usuario root ejecutará una actualización todos los domingos (sun) a las 10:45 a.m

30 7 20 11 * usuario /home/usuario/scripts/actualizar.sh

El día 20 de noviembre a las 7:30 el usuario correra el script

30 7 11 11 sun usuario /home/usuario/scripts/miscript.sh

El día 11 de noviembre a las 7:30 a.m. y que sea domingo.

01 * * * * usuario /home/usuario/scripts/recordatorio.sh

Cada minuto de cada hora todos los días (NO recomendable a menos que se sepa que se está haciendo).

*/15 * * * * /home/test.sh

Programar un trabajo para ejecutarse cada 15 minutos

Igual se pueden manejar rangos especiales:

30 17 * * 1,2,3,4,5

A las 5:30 de la tarde todos los días de lunes a viernes.

00 12 1,15,28 * *

A las 12 del día todos los días primero, quince y 28 de cada mes (ideal para nóminas)

NOTA: Si hemos editado el cron usando #crontab -e” no precisará de reinicio, pues cuando salgamos ya se reiniciará el demonio, pero si lo hemos hecho usando “#vim /etc/crontab” luego tendremos que reiniciar el demonio con este comando:

#/etc/init.d/crontab reload

Recordamos también que podemos ver los crontab añadidos con:

#crontab -l

O editar el crontab de un usuario en concreto (si no le decimos que usuario editamos, estamos editando el cron del usuario con el que estemos conectados:

crontab -e -u usuario

O bien eliminar los crontab de un usuario:

crontab -r -u usuario

Al comienzo del fichero podemos especificar una dirección de correo electrónico a la cual se envíen los informes de ejecución de crontabs:

MAILTO="test@test.com"

Con estas nociones básicas ya podéis trabajar de un modo eficaz gestionando cron mediante el comando crontab.

Como última nota decir que Open6hosting ofrece paneles gráficos tanto en cPanel como en ISPconfig donde puedes configurar tu crontab con unos sencillos clicks, sin necesidad de andar con la consola de comandos.

¡Déjanos una respuesta!