Introducción

Los cron jobs son tareas que se agregan al demonio cron para que las ejecute periódicamente, en momentos específicos.

Por lo general se quiere ejecutar una tarea todos los lunes, o todos los días a las 5 pm, etc. Cron es muy potente y flexible. Veamos qué es:

Cron es un planificador de tareas basado en tiempo en sistemas operativos tipo Unix. Permite a los usuarios programar trabajos (comandos o scripts) para que se ejecuten periódicamente en ciertos momentos o fechas. Se usa habitualmente para automatizar tareas de mantenimiento o administración del sistema.

En Linux, los cron jobs se pueden agregar de dos formas:

  • Agregándolos al script cron del usuario
  • Agregándolos a las carpetas @hourly, @daily, @monthly o @weekly de root

Agregar un cron job en GNU/Linux

Para editar el crontab del usuario actual:

crontab -e

Para editar el crontab de otro usuario (requiere ser root):

crontab -u [usuario] -e

Para listar los trabajos programados:

crontab -l

Sintaxis

La sintaxis del archivo crontab es:

Min  Hora  Día  Mes  DiaSem  /ruta/al/comando arg1 arg2

Donde:

  • Min — Minuto, valor numérico de 0 a 59
  • Hora — Hora de ejecución, valor numérico de 0 a 23
  • Día — Día del mes, valor numérico de 1 a 31
  • Mes — Mes de ejecución, valor numérico de 1 a 12
  • DiaSem — Día de la semana, valor numérico de 0 a 7 (0 y 7 son domingo)

Se puede poner un asterisco * en cualquier campo para indicar "siempre".

Ejemplo: ejecutar un script de backup a las 00:30 todos los días:

30 0 * * * /home/usuario/backup.sh

Ejemplos

Ejecutar en un momento específico, una sola vez:

12 02 2 11 * /home/usuario/tarea.pl

A las 2:12 am del 2 de noviembre.

Ejecutar dos veces, en noviembre y diciembre:

12 02 02 11,12 * /home/usuario/tarea.pl

Ejecutar en días laborables a las 14:00:

00 14 * * 1-5 /home/usuario/tarea.pl

Ejecutar cada 15 minutos:

*/15 * * * * comando

Palabras especiales:

@yearly   # Cada año, el 1 de enero a las 00:00
@daily    # Todos los días a las 00:00
@hourly   # Cada hora, al minuto 0
@reboot   # Al reiniciar el sistema

Carpetas de cron del sistema

Si quieres ejecutar una tarea cada hora, día, semana o mes, coloca tu script en una de estas carpetas:

  • /etc/cron.daily/
  • /etc/cron.hourly/
  • /etc/cron.monthly/
  • /etc/cron.weekly/

El script debe ser ejecutable y necesitarás permisos de escritura en esas carpetas.

Conclusión

Los cron jobs son la herramienta indicada cada vez que necesitas ejecutar una tarea periódicamente. No olvides leer las páginas del manual de crontab y crond.