Contenido del curso

Introducción a los servidores

Cómo automatizar tareas con cron jobs

Resumen

Automatizar tareas repetitivas en Linux es una de las habilidades más valiosas para cualquier administrador de sistemas, y los cron jobs son la herramienta estándar para lograrlo. Aprenderás a programar scripts que se ejecuten en horarios específicos usando el cron daemon y el archivo crontab, ideal si gestionas servidores en producción o quieres optimizar tu flujo de trabajo.

Qué es un cron job y cómo funciona en Linux

Un cron job es una tarea programada que el sistema ejecuta de forma automática según una periodicidad definida. Se compone de dos piezas que trabajan en conjunto y que vale la pena distinguir desde el inicio [2:10].

Por un lado está el cron daemon, un servicio que corre en segundo plano y se encarga de leer y ejecutar las tareas. Por otro está el crontab, un archivo con una sintaxis muy específica donde tú defines qué quieres ejecutar y cuándo.

Antes de configurar nada, conviene verificar que el demonio esté activo. Lo haces con systemctl status cron. Si lo ves running, ya puedes empezar.

¿Qué diferencia hay entre cron daemon y crontab? El cron daemon es el proceso que ejecuta las tareas en segundo plano. El crontab es el archivo donde tú escribes las tareas y la programación que el daemon va a leer.

Cómo se escribe la sintaxis de un crontab

La sintaxis de un cron job parece intimidante al principio, pero sigue un patrón fijo de cinco campos seguidos del comando que quieres ejecutar [3:50]. Cada campo representa una unidad de tiempo y se escribe en este orden:

  • Minuto: de 0 a 59.
  • Hora: de 0 a 23.
  • Día del mes (day of month): de 1 a 31.
  • Mes: de 1 a 12.
  • Día de la semana (day of week): de 0 a 6, donde 0 es domingo. También puedes usar 7 como domingo si te resulta más natural.

Después de los cinco campos viene el comando. Si quieres que un campo aplique a cualquier valor, usas un asterisco. También puedes combinar guiones para rangos o comas para horarios múltiples, por ejemplo ejecutar algo a las 8:00, 12:00 y 16:00.

Puedes ver un ejemplo real abriendo el archivo del sistema con less /etc/crontab. Ahí encontrarás los job definitions comentados que el sistema usa por defecto.

Cómo crear tu primer cron job paso a paso

Cada usuario tiene su propio crontab, y eso importa: si trabajas con el usuario root, las tareas se ejecutan con permisos de sistema, lo cual es lo recomendable en servidores de producción.

Para crear o editar el crontab del usuario actual escribe crontab -e. Si es la primera vez, te pedirá elegir un editor de texto entre opciones como Nano, Vim, Vim Tiny o Ed. Selecciona el que prefieras y entrarás al archivo.

Ejemplo: programar una actualización semanal del sistema

Una tarea de mantenimiento clásica es actualizar paquetes. Supón que quieres ejecutarla todos los domingos a las 3:00 a.m. La línea quedaría así:

bash 0 3 * * 0 apt update -y && apt upgrade -y

Esto se traduce como: minuto 0, hora 3, cualquier día del mes, cualquier mes, día de la semana 0 (domingo). El comando usa && para encadenar dos acciones: primero actualiza la lista de paquetes y luego instala las actualizaciones.

Fíjate en el -y al final de cada comando. Es fundamental porque evita que el script se quede esperando confirmación manual, un error muy común al automatizar tareas.

¿Por qué usar el día de la semana en vez del día del mes? Programar por semana asegura que la tarea se ejecute siempre, incluso en años con 53 semanas. Solo usa día fijo del mes cuando una regla de negocio lo exija, como nóminas o pagos a proveedores.

Para guardar en Vim presionas Esc y luego escribes :wq. El cron daemon lee el archivo automáticamente y empieza a respetar la programación.

Dónde se almacenan los crontabs y cómo verificarlos

Cada usuario tiene su propio archivo de crontab almacenado en una ubicación específica del sistema. Si quieres ver todos los crontabs creados, navega a /var/spool/cron/crontabs y ejecuta ls. Verás un archivo por cada usuario que haya configurado tareas, por ejemplo root o el nombre de tu usuario [9:30].

Si solo quieres revisar el crontab del usuario actual sin entrar al editor, usa crontab -l. Te listará en pantalla las tareas configuradas.

Para editar nuevamente y corregir algún typo o agregar comandos, vuelves a ejecutar crontab -e. Después de guardar, puedes verificar con systemctl status cron que el servicio haya hecho un reload de los crontabs, señal de que tus cambios fueron cargados correctamente.

Si necesitas un crontab que aplique a todo el sistema y no a un usuario específico, debes editar el archivo /etc/crontab directamente.

Cuál es la principal limitación de cron

La gran ventaja de cron es lo simple y rápido que resulta automatizar scripts. La desventaja es que no verifica si la ejecución del script fue exitosa. Puede pasar que tu cron job consulte una base de datos y funcione perfecto durante siete semanas, pero a la octava se caiga el servicio y cron no te avise.

Aquí entran herramientas complementarias que resuelven ese dolor:

  • Cron monitor: alerta si el job no se ejecutó o falló.
  • Scripts de logging propios que envían notificaciones.
  • Combinaciones con servicios externos de monitoreo.

Experimenta con la sintaxis sin miedo. Hay más símbolos además del asterisco que te permiten definir rangos, listas de días o minutos específicos para ejecutar tus scripts de forma mucho más inteligente.

¿Qué tarea repetitiva de tu sistema automatizarías primero con un cron job? Cuéntame en los comentarios cómo planeas usarlo en tu servidor.