¿Odias los anuncios? Ir Sin publicidad Hoy

Detente de buscar sintaxis de Cron — hay un generador para eso

Actualizado en

Las expresiones cron son una de esas cosas que usas constantemente pero que nunca consigues recordar. Aquí te explico lo que significan realmente los cinco campos, los errores que afectan a las personas, y por qué un generador en línea de expresiones cron es simplemente una opción más inteligente.

Deja de buscar la sintaxis de cron — hay un generador para eso 1
ANUNCIO · ¿ELIMINAR?

Son las 2 de la madrugada. Una implementación está programada para las 6 de la mañana. Necesitas verificar de nuevo que el trabajo cron realmente se ejecute en el momento correcto. Por lo tanto, abres una pestaña nueva y escribes "sintaxis de cron" en Google. De nuevo.

Este es un paso de paso. Cada desarrollador que haya tocado un servidor Linux lo ha hecho al menos una vez — y la mayoría de nosotros lo hemos hecho más veces de las que queremos admitir. Las expresiones de cron son una de esas cosas que usas constantemente pero que nunca retienes completamente. La sintaxis se encuentra en una zona incómoda entre «demasiado simple para buscar» y «lo suficientemente específica como para equivocarse».

Hay una manera mejor. Usa un generador en línea de expresiones de cron y deja que la herramienta maneje la sintaxis mientras te enfocas en lo que realmente importa.

Por qué la sintaxis de cron se resiste a quedarse

Cron tiene cinco campos. Cinco. Eso es todo. Y sin embargo, el orden confunde a las personas cada vez que lo intentan:

# ┌───────────── minute (0–59)
# │ ┌───────────── hour (0–23)
# │ │ ┌───────────── day of month (1–31)
# │ │ │ ┌───────────── month (1–12)
# │ │ │ │ ┌───────────── day of week (0–6, Sunday=0)
# │ │ │ │ │
  * * * * * command

El problema no es que sea difícil — es que hay solo suficientes caracteres especiales para introducir ambigüedad. ¿Es */5 "cada 5 minutos" o "en el minuto 5"? ¿Ejecuta 0 9 * * 1-5 a las 9 de la mañana o a las 9 de la noche? ¿Qué pasa si olvidas que los meses son indexados desde 1 pero los días de la semana comienzan en 0?

Estos no son trampas para principiantes. Son trampas para todos. Un trabajo cron mal configurado es una de las formas más silenciosas de introducir un incidente en producción — el tipo en el que nada se cae inmediatamente, simplemente no se ejecuta y solo lo notan tres días después.

Los cinco campos, explicados sin ceremonia

Aquí está la versión práctica:

  • Minuto (0–59) — El minuto del hora en el que se ejecuta el trabajo. 30 significa la marca de los 30 minutos. */15 significa cada 15 minutos.
  • Hora (0–23) — Usa el tiempo en formato de 24 horas. 9 es las 9 de la mañana. 17 es las 5 de la tarde. Sin tonterías de AM/PM.
  • Día del mes (1–31) — ¿Qué día del calendario? 1 es el primer día del mes. 15 es el 15.
  • Mes (1–12) — Enero es 1, diciembre es 12. También puedes usar nombres: JAN, FEB, etc.
  • Día de la semana (0–6 o 1–7) — Domingo puede ser 0 o 7 dependiendo de la implementación de cron. Lunes siempre es 1. Este es el campo que causa más confusión.

Los caracteres especiales que importan

  • * — Todos los valores posibles (cada minuto, cada hora, etc.)
  • */n — Cada nintervalo. */5 en el campo de minutos significa cada 5 minutos.
  • a-b — Un rango. 1-5 en el campo de días de la semana significa lunes a viernes.
  • a,b,c — Una lista. 1,3,5 significa lunes, miércoles, viernes.
  • @reboot, @hourly, @daily — Alias abreviados. No soportados en todos los lugares.

Errores comunes que afectan a las personas

1. Olvidar el tiempo zona

Cron se ejecuta en la zona horaria local del servidor. Si tu servidor está en UTC y tú estás en Nueva York, 0 9 * * * no se ejecuta a las 9 de la mañana del Este — se ejecuta a las 4 o 5 de la mañana, dependiendo de la hora de verano. Siempre conoce la zona horaria del servidor. Siempre.

2. Usar tanto el día del mes como el día de la semana

Si especificas un valor en ambos campos de día del mes y y día de la semana (en lugar de * en uno de ellos), la mayoría de las implementaciones de cron lo tratan como una OR — el trabajo se ejecuta cuando cualquiera de las condiciones se cumple. Eso casi nunca es lo que quieres.

3. Esperar que */1 signifique "una sola vez"

*/1 es lo mismo que *. Significa "cada uno". No hay forma de expresar "ejecutar una sola vez" en cron estándar — para eso, usarías at o un temporizador systemd de una sola vez.

4. No probar antes de desplegar

Cron no da retroalimentación inmediata. Escribe la expresión, guarda el crontab y luego esperas. Si está mal, lo descubres a las 3 de la mañana cuando el backup programado no se ejecuta. Por eso, usar un calculador en línea de la próxima ejecución de cron antes de desplegar vale la pena los 30 segundos que toma.

Usa un generador de expresiones de cron en su lugar

La recomendación honesta: deja de intentar escribir expresiones de cron de memoria. Usa un generador. No es una señal de debilidad — es la forma de evitar errores estúpidos en producción.

El generador de expresiones de cron en IOTools te permite construir cualquier expresión visualmente — elige tu intervalo de minutos, hora, día de la semana y verás la expresión exacta y una explicación en lenguaje común de cuándo se ejecuta. Sin necesidad de memorizar, sin tener que abrir pestañas de documentación.

Una vez que tengas una expresión, ejecútala en el calculador en línea de la próxima ejecución de cron. Pega la expresión, obtén las próximas 5 a 10 ejecuciones programadas. Toma cinco segundos y te dirá inmediatamente si has programado accidentalmente tu trabajo de limpieza para que se ejecute cada minuto en lugar de una vez al día.

Esa segunda verificación es la que la mayoría de las personas omite. No la omitas.

Referencia rápida: expresiones que usarás realmente

ExpresiónSignificado
* * * * *Cada minuto
0 * * * *Cada hora, en la hora
0 9 * * *Cada día a las 9:00 a.m.
0 9 * * 1-5Días laborables a las 9:00 a.m.
*/15 * * * *Cada 15 minutos
0 0 * * 0Cada domingo a medianoche
0 0 1 * *Primer día de cada mes a medianoche
30 4 1,15 * *1º y 15º del mes a las 4:30 a.m.
0 22 * * 1-5Días laborables a las 10:00 p.m.
@dailyUna vez al día a medianoche (abreviatura)
¿Quieres eliminar publicidad? Adiós publicidad hoy

Instalar extensiones

Agregue herramientas IO a su navegador favorito para obtener acceso instantáneo y búsquedas más rápidas

añadir Extensión de Chrome añadir Extensión de borde añadir Extensión de Firefox añadir Extensión de Opera

¡El marcador ha llegado!

Marcador es una forma divertida de llevar un registro de tus juegos, todos los datos se almacenan en tu navegador. ¡Próximamente habrá más funciones!

ANUNCIO · ¿ELIMINAR?
ANUNCIO · ¿ELIMINAR?
ANUNCIO · ¿ELIMINAR?

Noticias Aspectos técnicos clave

Involucrarse

Ayúdanos a seguir brindando valiosas herramientas gratuitas

Invítame a un café
ANUNCIO · ¿ELIMINAR?