Tools Blog

Comprensión de las expresiones cron: una guía práctica para la automatización de tareas

Cron Job Automation

Si alguna vez administró un servidor Linux, trabajó en desarrollo backend o configuró funciones automatizadas en la nube, probablemente haya encontrado una cadena similar a esta: 0 2 * * *. Para los no iniciados, parece un error tipográfico en el teclado. Para los administradores de sistemas, es el corazón de la automatización de la infraestructura moderna: una expresión cron.

Cron es el motor invisible que ejecuta Internet. Garantiza que su base de datos tenga una copia de seguridad a las 3:00 a. m., activa los correos electrónicos que recibe todos los lunes por la mañana y borra los archivos temporales del servidor antes de que bloqueen el sistema. Pero a pesar de su poder, la sintaxis es muy difícil de analizar para los humanos. En esta inmersión profunda, desmitificaremos los asteriscos y le enseñaremos cómo leer y escribir programaciones cron como un ingeniero experimentado en DevOps.

¿Qué es Cron y Crontab?

Cron es un programador de trabajos basado en el tiempo que se encuentra en los sistemas operativos informáticos similares a Unix. El nombre "cron" proviene de la palabra griega que significa tiempo, chronos. Los usuarios que configuran y mantienen entornos de software utilizan cron para programar trabajos (comandos o scripts de shell) para que se ejecuten periódicamente en horas, fechas o intervalos fijos.

El Crontab (Cron Table) es el archivo de configuración donde se almacenan estos horarios. Cuando editas tu crontab a través de la terminal, estás escribiendo una lista de instrucciones que le dicen al servidor exactamente qué ejecutar y cuándo.

Deconstruyendo los 5 asteriscos

Una expresión cron estándar consta de 5 campos separados por espacios en blanco. Cada campo representa una unidad de tiempo específica y siempre se leen de izquierda a derecha en este orden exacto:

* * * * *  command_to_execute
- - - - -
| | | | |
| | | | +----- Day of the Week (0 - 6) (Sunday=0 or 7)
| | | +------- Month (1 - 12)
| | +--------- Day of the Month (1 - 31)
| +----------- Hour (0 - 23)
+------------- Minute (0 - 59)

Un asterisco (*) significa "todos los valores posibles para este campo". Entonces, la expresión * * * * * se traduce literalmente como: "Ejecuta cada minuto, cada hora, cada día, cada mes, cada día de la semana".

Modificadores de sintaxis: pasos, rangos y listas

El poder de cron proviene de sus modificadores. No está limitado sólo a números específicos o "todo".

1. El modificador de pasos (/)

Si desea que se ejecute un script cada 15 minutos, utilice un paso. */15 * * * * significa "cada minuto divisible por 15". Funcionará a las 0, 15, 30 y 45 después de la hora.

2. El modificador de rango (-)

Si solo desea que se ejecute una secuencia de comandos durante el horario comercial, utilice un rango. 0 9-17 * * * significa "ejecutar en el minuto cero, cada hora de 9 a. m. a 5 p. m.".

3. El modificador de lista (,)

Si desea que algo se ejecute en días específicos y no secuenciales, utilice una lista. 0 0 1,15 * * significa "ejecutar a la medianoche del día 1 y 15 del mes".

Deja de adivinar expresiones cron

No se arriesgue a ejecutar un script de respaldo cada minuto en lugar de cada mes. Un solo error tipográfico puede bloquear un servidor de producción. Utilice nuestro generador visual interactivo para crear y validar cadenas cron de forma segura.

Abrir generador de trabajos cron

El error cron más peligroso

El error más común y catastrófico que cometen los desarrolladores es confundir el campo "Minuto". Veamos un escenario en el que desea ejecutar un script de limpieza de base de datos una vez cada hora a las 2:00 a.m.

El error: * 2 * * *

Si escribe lo anterior, le está diciendo al servidor que ejecute el script "Cada minuto, durante la segunda hora del día". El script de limpieza de su base de datos pesada se activará 60 veces seguidas, lo que probablemente sobrecargará su CPU, bloqueará las tablas de la base de datos y provocará una interrupción masiva.

La forma correcta: 0 2 * * *

Esto le dice explícitamente al servidor que se ejecute sólo en el "Minuto cero, de la segunda hora". Se ejecutará exactamente una vez a las 2:00 a.m.

Preguntas frecuentes (FAQ)

¿cron tiene en cuenta las zonas horarias?

De forma predeterminada, cron evalúa las expresiones según la hora del sistema local del servidor en el que se está ejecutando. Si su servidor está alojado en una región de AWS en Londres, se ejecuta en UTC/GMT. Debe tener en cuenta las diferencias de zona horaria si sus usuarios se encuentran en Nueva York o Tokio.

¿Puedo programar una tarea cron para que se ejecute cada segundo?

No. El cron estándar de Unix está limitado a una resolución de un minuto. Si necesita una programación de menos de un minuto (por ejemplo, cada 10 segundos), debe usar una herramienta demonio separada o escribir un script que se ejecute cada minuto pero que se realice en bucle internamente con comandos de suspensión.

¿Qué significan cadenas como @daily o @hourly?

Muchas implementaciones modernas de cron admiten macros predefinidas no estándar para facilitar la programación. @daily es exactamente lo mismo que 0 0 * * * (medianoche todos los días). @hourly es lo mismo que 0 * * * *. Si bien son útiles, no son universalmente compatibles con todos los sistemas heredados.