Generador Crontab y Constructor de Expresiones Cron
Construye, valida y decodifica expresiones cron en el navegador. Vista previa de próximas ejecuciones en hora local o UTC. POSIX 5 campos, presets y descripción natural. Gratis y privado.
Lenguaje natural
—
Próximas 5 ejecuciones programadas
¿Qué Es una Expresión Cron?
Una expresión cron es una cadena de cinco campos que define una programación recurrente. De izquierda a derecha, los campos son minuto (0-59), hora (0-23), día del mes (1-31), mes (1-12) y día de la semana (0-6, donde 0 y 7 significan domingo). Cada campo acepta un valor, una lista (`1,3,5`), un rango (`1-5`), un comodín (`*` significando cualquier valor) o un paso (`*/15` significando cada 15). La combinación define exactamente cuándo se ejecutará el comando programado; por ejemplo, `0 9 * * 1-5` se lee como "en el minuto 0, hora 9, cualquier día del mes, cualquier mes, día de la semana de lunes a viernes", en lenguaje natural, "días laborables a las 9:00 AM".
Cron se originó en Unix Versión 7 en 1979 y la gramática de cinco campos ha permanecido prácticamente sin cambios durante más de cuatro décadas, un testimonio de lo bien diseñada que está la sintaxis original. Hoy las expresiones cron se usan mucho más allá del archivo crontab de Unix: CronJobs de Kubernetes, workflows de GitHub Actions, reglas de AWS EventBridge, pipelines programadas de GitLab CI, Cron Triggers de Cloudflare Workers y plataformas serverless en cada nube aceptan la misma gramática de cinco campos. Aprender cron una vez significa saber programar trabajos en cualquier contexto moderno de infraestructura.
El estándar POSIX define cinco operadores: `*` (cualquier valor), `,` (lista de valores), `-` (rango), `/` (paso) y tokens con nombre para meses (JAN-DEC) y días de la semana (SUN-SAT). La mayoría de implementaciones también expanden cinco atajos comunes: `@yearly` (`0 0 1 1 *`), `@monthly` (`0 0 1 * *`), `@weekly` (`0 0 * * 0`), `@daily` (`0 0 * * *`) y `@hourly` (`0 * * * *`). El scheduler Quartz (una librería Java) extiende esto con un campo opcional de segundos y operadores adicionales (`?`, `L`, `W`, `#`), útil si trabajas en Java/Spring, pero no portable a cron estándar. Esta herramienta sigue el estándar POSIX de cinco campos porque es la variante dominante y la que tu servidor Linux, runner de GitHub Actions y cluster de Kubernetes realmente entenderán.
Una peculiaridad de cron POSIX merece atención especial: cuando tanto día del mes como día de la semana están restringidos (ninguno es `*`), la programación se ejecuta cuando CUALQUIERA coincide, semántica OR, no AND. Así que `0 0 1 * 5` se ejecuta el día 1 de cada mes Y todos los viernes, no solo los viernes que caen en día 1. Es la sorpresa más común de cron; la vista previa de próxima ejecución en esta herramienta lo deja claro mostrando las fechas y horas reales en que la programación se disparará. Verifica antes de desplegar.
Todo el análisis y el cálculo de próxima ejecución sucede enteramente en tu navegador usando JavaScript: ninguna expresión, programación u otro dato se envía nunca a un servidor. Esta herramienta analiza cualquier expresión cron POSIX estándar al instante con descripción en lenguaje natural y vista previa de cinco ejecuciones, con privacidad completa.
Las expresiones cron están estrechamente relacionadas con otras herramientas para desarrolladores. Los trabajos cron se depuran comúnmente comparando timestamps Unix contra los tiempos de ejecución esperados, y las programaciones complejas a menudo se documentan como configuración JSON que puede validarse con nuestro formateador JSON. Para una guía a fondo que cubre la semántica OR, las trampas de zona horaria y las variantes comunes de cron con ejemplos en Linux, Kubernetes y GitHub Actions, lee nuestra referencia de programaciones cron.
# Linux crontab entry — runs every 15 minutes
*/15 * * * * /usr/local/bin/poll-api.sh
# Kubernetes CronJob — weekdays at 9:00 AM UTC
apiVersion: batch/v1
kind: CronJob
metadata:
name: daily-report
spec:
schedule: "0 9 * * 1-5"
timeZone: "UTC"
jobTemplate:
spec:
template:
spec:
containers:
- name: report
image: report-runner:1.0
restartPolicy: OnFailure
# GitHub Actions workflow — hourly
on:
schedule:
- cron: '0 * * * *'
# AWS EventBridge — first of each month
ScheduleExpression: cron(0 0 1 * ? *)
# (Note: AWS uses the Quartz 6-field form with '?' for day-of-week) Características Clave
Parser POSIX de 5 Campos en Vivo
Parser estricto que sigue cron POSIX: minuto (0-59), hora (0-23), día del mes (1-31), mes (1-12 o JAN-DEC), día de la semana (0-6 o SUN-SAT, con 7 también aceptando domingo). Todos los operadores estándar (`*` `,` `-` `/`) y macros (`@yearly` `@monthly` `@weekly` `@daily` `@hourly`) soportados.
Vista Previa de las Próximas 5 Ejecuciones
Calcula las próximas cinco horas de ejecución programada desde tu hora local actual. Cambia entre Local y UTC con un clic, la forma más fiable de detectar sorpresas de zona horaria antes de desplegar un crontab a un servidor en una región distinta.
Descripción en Lenguaje Natural
Cada expresión válida obtiene una explicación legible: "Cada 15 minutos", "Días laborables a las 9:00 AM", "A las 02:30 el día 1 del mes, en enero y julio". Hace que la revisión de código y el traspaso al equipo sean sencillos, sin adivinar qué hace realmente `*/5 9-17 * * 1-5`.
Mensajes de Error a Nivel de Campo
Las expresiones inválidas obtienen feedback rojo instantáneo con el campo problemático resaltado y un error específico: "Error en minuto: valor fuera de rango [0, 59]: "60"". Se acabaron los fallos silenciosos de crontab descubiertos tres días después cuando el reporte no se ejecutó.
Chips de Preset para Programaciones Comunes
Once presets de un clic cubren las programaciones que realmente usarás: cada minuto, cada 5/15 minutos, cada hora, diariamente a medianoche o a las 9 AM, días laborables a las 9 AM, semanalmente el domingo/lunes, primero de cada mes y anualmente. Toca, ajusta, despliega.
Inputs Constructores por Campo
No memorices el orden de los cinco campos: cinco inputs pequeños etiquetados Minuto, Hora, Día del mes, Mes y Día de la semana te permiten editar una posición a la vez sin perder un valor ni mezclar el orden. La expresión completa de arriba se reconstruye automáticamente.
Semántica POSIX OR Bien Implementada
Cuando tanto día del mes como día de la semana están restringidos, entra en acción la regla OR: `0 0 1 * 5` se ejecuta cada día 1 Y cada viernes. La vista previa de próxima ejecución hace esto visible antes de desplegar; no más alertas sorpresa en fin de semana.
Privacidad 100% en el Navegador
Tus expresiones cron, que a menudo revelan tiempos de infraestructura y patrones internos de scheduling, nunca salen de tu navegador. No se envía ningún dato a ningún servidor, sin logging, sin analítica. Puedes verificarlo en la pestaña de Red de tu navegador. Seguro para programaciones de producción y sistemas internos.
Mensajes de Error Conscientes de Quartz
Si pegas una expresión Quartz con `?` `L` `W` o `#`, el parser explica "Operadores de Quartz no soportados, usa sintaxis POSIX", así sabes que debes reescribirla para cron en lugar de depurar un fallo silencioso. Las programaciones Quartz no corren en cron de Linux.
Variantes de Cron y Schedulers
Vixie cron (default de Linux)
5 campos POSIXEl default en la mayoría de distros Linux. POSIX estricto con la extensión `CRON_TZ=` para zona horaria explícita. Aplica la semántica OR de día del mes / día de la semana. Objetivo principal de esta herramienta.
BSD cron
5 campos POSIXDefault en macOS y familia BSD. Compatible con POSIX con diferencias menores de implementación frente a vixie cron; la mayoría de expresiones funcionan idénticamente.
timers de systemd (OnCalendar)
spec de calendario, no cronAlternativa a cron en Linux basado en systemd. Usa sintaxis `OnCalendar: 2026-*-* 09:00:00`, más legible para programaciones no recurrentes pero no interoperable con expresiones cron.
Quartz Scheduler (Java/Spring)
6 o 7 camposAñade campos de segundos (obligatorio) y año (opcional), más operadores `?`, `L`, `W`, `#`. Útil para apps Java pero no portable a cron de Linux.
AWS EventBridge
6 campos estilo Quartz con `?`Requiere que día de la semana o día del mes sea `?` (convención Quartz) en lugar de `*` cuando solo uno está restringido. Las expresiones no se portan directamente a cron de Linux.
CronJob de Kubernetes
5 campos POSIX + campo timeZoneProgramación POSIX de 5 campos más campo `spec.timeZone` (1.27+). Más limpio que depender de la zona horaria del host del kubelet. Las expresiones se portan directamente desde cron de Linux.
GitHub Actions
5 campos POSIXSiempre corre en UTC. Tiempo best-effort, puede omitirse bajo alta carga. Evita intervalos menores a 15 minutos. Las expresiones se portan directamente desde cron de Linux.
Ejemplos de Expresiones Cron
Cada 15 Minutos
*/15 * * * *
Operador de paso: `*/15` en el campo minuto significa "cada 15 minutos empezando en el minuto 0", por lo que las ejecuciones ocurren a :00, :15, :30, :45 de cada hora de cada día. Es el intervalo más común para hacer polling de APIs, refrescar cachés y chequeos de heartbeat.
Días Laborables a las 9:00 AM
0 9 * * 1-5
El rango `1-5` en el campo día de la semana significa de lunes a viernes (1=lun, 5=vie). Se ejecuta exactamente a las 09:00, útil para reportes en horario laboral, trabajos por lotes que dependen de datos generados durante la noche y recordatorios diarios de standup.
Primero del Mes a Medianoche
0 0 1 * *
Día del mes `1`, todos los demás campos inferiores en cero. Común para facturación mensual, rotación de logs y conciliación de fin de período. Día del mes y día de la semana están ambos restringidos solo cuando ninguno es `*`; aquí día de la semana es `*`, así que solo importa el día del mes.
Cada 5 Minutos Entre 9 AM y 5 PM, Días Laborables
*/5 9-17 * * 1-5
Combina paso (`*/5`) con rango (`9-17`) en campos distintos. Útil para monitoreo solo en horario laboral o drenaje de colas. Total: 12 ejecuciones/hora × 9 horas × 5 días = 540 ejecuciones por semana laboral.
Trimestral: Día 1 de Ene, Abr, Jul, Oct a Medianoche
0 0 1 JAN,APR,JUL,OCT *
Meses con nombre en una lista separada por comas. Programaciones trimestrales como cierre financiero, revisiones de code-freeze o auditorías de cumplimiento. Puedes mezclar nombres y números (`1,APR,7,10` se interpreta igual), pero mantente en un solo estilo por legibilidad.
Trampa POSIX OR: Día 1 del Mes O Cada Viernes
0 0 1 * 5
Cuando AMBOS día del mes (`1`) Y día de la semana (`5`) están restringidos, cron POSIX ejecuta el trabajo si CUALQUIERA coincide. Así que esto se dispara el día 1 de cada mes Y todos los viernes, no solo los viernes que caen en día 1. Es la sorpresa más común de cron; la vista previa de próxima ejecución lo deja claro.
Cada Día a las 02:30 (Ventana de Bajo Tráfico)
30 2 * * *
Valores específicos tanto para hora como para minuto, comodines en el resto. La ventana 02:00-04:00 UTC es la convención de facto para trabajos por lotes nocturnos porque no se superpone con el horario laboral de ninguna región de negocio importante. Combínalo con el toggle UTC para confirmar que la ejecución cae donde esperas.
Equivalente Macro: @daily
@daily
El atajo `@daily` (también `@midnight`) se expande a `0 0 * * *`, todos los días a medianoche. Otros macros: `@yearly` = `0 0 1 1 *`, `@monthly` = `0 0 1 * *`, `@weekly` = `0 0 * * 0`, `@hourly` = `0 * * * *`. Los macros son concisos, pero la forma de cinco campos es más portable entre schedulers (algunos soportan macros, otros no).
Cómo Construir una Expresión Cron
- 1
Escribe o pega una expresión cron
Introduce una expresión cron de cinco campos en el input de arriba (p. ej. `*/15 * * * *`). La herramienta analiza y valida mientras escribes: check verde para válida, error rojo con nombre de campo para inválida. Macros como `@daily`, `@hourly`, etc. también se aceptan.
- 2
O ajusta los cinco inputs de campo
No memorices el orden de los campos: edita Minuto, Hora, Día del mes, Mes o Día de la semana individualmente usando los inputs etiquetados. La expresión completa de arriba se actualiza automáticamente. Usa `*` para comodines, `*/N` para pasos, `a-b` para rangos y `1,3,5` para listas.
- 3
Elige un preset para empezar rápido
Toca cualquier chip preset (Cada 15 minutos, Días laborables a las 9 AM, etc.) para cargar una programación común, y luego ajusta los campos según tu necesidad exacta. Once presets cubren los patrones que realmente usarás en producción.
- 4
Verifica la vista previa de próxima ejecución
Mira las cinco próximas fechas y horas de ejecución; cambia entre Local y UTC para confirmar que la programación se dispara cuando pretendes. Es la forma más fiable de detectar la trampa OR día del mes / día de la semana de POSIX antes de que te muerda en producción.
- 5
Copia y pega en tu scheduler
Haz clic en Copiar para tomar la expresión. Pégala en tu crontab, timer de systemd, `cron:` de GitHub Actions, AWS EventBridge, `schedule` de CronJob de Kubernetes o cualquier scheduler compatible con cron. No olvides verificar la zona horaria del scheduler objetivo; mira la sección de Buenas Prácticas más abajo.
Errores Comunes en Cron
Trampa POSIX OR: Ambos Campos de Día Restringidos
Cuando AMBOS día del mes y día de la semana están restringidos, cron POSIX ejecuta el trabajo si CUALQUIERA coincide, no ambos. Así que `0 0 1 * 5` se dispara el día 1 de cada mes Y todos los viernes, no solo los viernes que caen en día 1. Usa `*` en uno de los dos campos de día cuando quieras una condición única, o escribe un script wrapper que haga el chequeo AND.
# Pretendido: "primer viernes del mes" 0 0 1-7 * 5 # Realmente: se dispara los días 1-7 del mes O cada viernes, ambas condiciones
# Usa wrapper para semántica AND verdadera 0 0 * * 5 [ $(date +\%d) -le 7 ] && /tu-script # O elimina una condición y acepta la programación más laxa
Drift de Zona Horaria Entre Dev y Prod
Las programaciones cron en un servidor Linux usan la zona horaria del sistema, no la zona horaria local del autor. Un cron de 9:00 AM en un servidor configurado en UTC se dispara a las 4:00 AM US East. Diseña siempre programaciones contra la zona horaria del servidor objetivo, preferiblemente UTC, y fija la zona horaria explícitamente con `CRON_TZ=...` al inicio del crontab.
# Escrito por dev de US East, desplegado a servidor UTC 0 9 * * * /tu-reporte.sh # Se dispara a las 9 AM UTC = 4 AM US East, no lo que el dev quería
# Fija zona horaria, o escribe en UTC explícitamente CRON_TZ=America/New_York 0 9 * * * /tu-reporte.sh
Confusión del Operador de Paso: '*/15' vs '15'
`*/15` en minuto significa "cada 15 minutos empezando en 0" (entonces 0, 15, 30, 45). Solo `15` significa "solo en el minuto 15", una ejecución por hora. Los principiantes frecuentemente escriben `15` pensando que es cada 15 minutos; la descripción en lenguaje natural de la herramienta hace el error obvio antes de desplegar.
# Pretendido: cada 15 minutos 15 * * * * # Realmente: una vez por hora, en el minuto 15 (4 ejecuciones/hora menos de lo pretendido)
# Correcto */15 * * * * # Cada 15 minutos: minuto 0, 15, 30, 45 de cada hora
Expresión de Seis Campos en Scheduler POSIX
Quartz/Spring/node-cron soportan un campo opcional de segundos como primera posición. Crontab de Linux, GitHub Actions, AWS EventBridge (en su mayoría) y CronJob de Kubernetes NO: esperan cinco campos. Pegar una expresión de seis campos rompe silenciosamente la programación: tus segundos se vuelven minutos, los minutos se vuelven horas, etc.
# Quartz de 6 campos copiado a crontab de Linux 0 0 9 * * 1-5 # Linux lee: minuto=0, hora=0, dom=9, mes=*, dow=1-5 # = medianoche en días 9 en meses coincidentes con días laborables — caos
# POSIX 5 campos, elimina los segundos 0 9 * * 1-5 # = días laborables a las 9:00 AM
Día del Mes Fuera de Rango para el Mes
Cron no valida el día del mes contra el mes real. `0 0 31 2 *` (31 de febrero) se analiza bien pero nunca coincide: febrero tiene como máximo 29 días. Los principiantes asumen que el parser detectará esto; no lo hace. La vista previa de próxima ejecución en esta herramienta muestra "No hay ejecuciones próximas" cuando una expresión es estructuralmente válida pero lógicamente imposible.
# Febrero 30 o 31, nunca se ejecuta 0 0 30 2 * 0 0 31 2 * # Se analiza pero ninguna programación se dispara nunca
# Usa patrón 'último día laborable de febrero' vía script 0 0 28-29 2 * [ $(date -d tomorrow +\%m) = 03 ] && /tu-script
Confundir Sintaxis de Quartz con POSIX
Los documentos de AWS, los tutoriales de Spring y muchas respuestas de Stack Overflow muestran expresiones cron de Quartz con `?`, `L`, `W` o `#`. Estas no funcionan en crontab de Linux. Si copias una expresión de seis campos con `?` en el slot de día de la semana, el parser de Linux la rechazará (o peor, la mal-analizará silenciosamente). Esta herramienta detecta operadores de Quartz y explica la diferencia.
# Quartz: 'último viernes del mes', inválido en POSIX 0 0 ? * 6L *
# Enfoque de script wrapper POSIX para último-viernes 0 0 25-31 * 5 /tu-script # Ejecutar en viernes entre el 25 y el 31 de cualquier mes
Casos de Uso Comunes
- Trabajos de Crontab en Linux
- Construye y verifica entradas para `/etc/crontab`, `/etc/cron.d/*` o archivos `crontab -e` por usuario. Usa la vista previa de próxima ejecución para confirmar que la programación cae a la hora correcta en la zona horaria configurada de tu servidor antes de guardar.
- Programaciones de CronJob de Kubernetes
- Genera el campo `spec.schedule` para un CronJob de Kubernetes. Kubernetes 1.27+ también soporta `spec.timeZone`: usa el toggle UTC para diseñar tu programación en UTC y luego configura `timeZone` explícitamente para evitar la hora local del nodo worker.
- Workflows Programados de GitHub Actions
- Construye la entrada `cron:` bajo `on.schedule`. GitHub Actions corre siempre en UTC: cambia la vista previa a UTC para confirmar tu programación. Evita intervalos menores a 15 minutos; el scheduler de GitHub omite trabajos de intervalo corto bajo carga.
- Reglas de AWS EventBridge
- Compón la expresión cron para una regla programada de EventBridge. Nota: AWS usa sintaxis Quartz de seis campos con `?` para día de la semana; esta herramienta emite POSIX de cinco campos, que necesitarás convertir prefijando segundos (`0`) y reemplazando el `*` en uno de los campos de día con `?`.
- Pipelines Programadas de GitLab CI
- Verifica la expresión cron para una pipeline CI programada en GitLab. GitLab usa sintaxis POSIX de cinco campos, lo que esta herramienta emite, y un selector de fecha en UI, pero el formato cron te da control más fino para intervalos no estándar.
- Cron Triggers de Cloudflare Workers
- Construye la entrada `[triggers.crons]` en `wrangler.toml`. Cloudflare usa sintaxis POSIX de cinco campos. El intervalo mínimo es un minuto; el worker corre en UTC. Usa la vista previa para verificar que el trigger se dispara dentro de tu ventana esperada.
- Programaciones node-cron de Node.js
- Construye expresiones para la librería `node-cron`, que soporta tanto POSIX de cinco campos como un campo inicial opcional de segundos. Mantente en cinco campos a menos que necesites específicamente precisión sub-minuto: las expresiones de seis campos no se portan al crontab de Linux.
- Revisión de Código y Documentación
- Pega una expresión cron de un PR o runbook para ver al instante qué hace, sin más adivinanzas con `30 7 * * 1-5` ni sacar una tarjeta de referencia. La descripción en lenguaje natural también es excelente para comentarios inline y archivos README.
Referencia de Sintaxis Cron
- Orden de Campos: M H D M W
- Minuto (0-59), Hora (0-23), Día del mes (1-31), Mes (1-12), Día de la semana (0-6, 7 también = domingo). Mnemotécnico: "Mi Hora Determina Mi Semana". El campo día de la semana acepta tanto tokens numéricos (0-6) como con nombre (SUN-SAT, sin distinguir mayúsculas).
- Operadores
- `*` = cualquier valor; `,` = separador de lista (`1,3,5`); `-` = rango (`1-5`); `/` = paso (`*/15`, `5/10`); nombres: JAN-DEC para mes, SUN-SAT para día de la semana (sin distinguir mayúsculas).
- Macros (Alias)
- `@yearly` = `0 0 1 1 *`; `@annually` = `0 0 1 1 *`; `@monthly` = `0 0 1 * *`; `@weekly` = `0 0 * * 0`; `@daily` = `0 0 * * *`; `@midnight` = `0 0 * * *`; `@hourly` = `0 * * * *`. `@reboot` es una no-programación especial (solo se ejecuta al arrancar) y se rechaza con un error explicativo.
- Semántica POSIX de Día (Regla OR)
- Cuando AMBOS día del mes y día de la semana están restringidos (ninguno es `*`), la programación se ejecuta cuando CUALQUIERA coincide, semántica OR. Cuando solo uno está restringido, ese decide. Cuando ambos son `*`, cualquier día coincide. Esta regla OR aplica a vixie cron, BSD cron y la mayoría de implementaciones POSIX; Quartz usa `?` para desambiguar AND vs OR.
- Modo de Seis Campos (Quartz-Lite)
- Si tu entrada tiene seis tokens separados por espacio, la herramienta trata el primero como campo de segundos (0-59). Útil para Quartz, `@Scheduled(cron=...)` de Spring y node-cron. NO es portable a crontab de Linux ni schedulers POSIX: tratarían tus segundos como minutos y desplazarían todo una posición.
- Anclaje del Operador de Paso
- `*/N` está anclado al valor más bajo del campo: `*/15` en minuto = `0,15,30,45`, no "cada 15 empezando ahora". Con una base no comodín: `5/15` en minuto = `5,20,35,50`. Los valores de paso que no dividen el rango del campo exactamente saltarán cerca del wraparound: esto es correcto, no un bug.
- Límites de Validación
- minuto ∈ [0,59], hora ∈ [0,23], día del mes ∈ [1,31], mes ∈ [1,12], día de la semana ∈ [0,7]. Los valores fuera de rango producen un error a nivel de campo. El día del mes NO se valida contra el mes (`0 0 31 2 *` se analiza bien pero nunca coincide porque febrero no tiene día 31; la vista previa de próxima ejecución mostrará "No hay ejecuciones próximas").
- Operadores de Quartz Rechazados
- Cron POSIX no soporta los operadores de Quartz `?` (sin valor específico), `L` (último), `W` (día laborable más cercano) ni `#` (n-ésimo día de la semana). Esta herramienta los rechaza con un mensaje claro "Operadores de Quartz no soportados" en lugar de analizarlos silenciosamente como POSIX inválido. Para programaciones Quartz, usa una herramienta consciente de Quartz o el scheduler de Spring.
- Límite Anual en la Búsqueda de Próxima Ejecución
- El cálculo de próxima ejecución busca hasta 4 años hacia adelante; las expresiones que coinciden con menor frecuencia (p. ej. patrones "29 de febrero") mostrarán "No hay ejecuciones próximas en los siguientes 4 años". Es por diseño, para evitar iteración no acotada en patrones imposibles.
Buenas Prácticas para Programaciones Cron
- Usa UTC en Servidores, Convierte al Mostrar
- Configura tus servidores en UTC (`/etc/timezone` o `TZ=UTC`) y escribe todas las expresiones cron en UTC. Convierte a hora local solo al mostrar en tus dashboards y reportes. Esto elimina toda una categoría de bugs de zona horaria que pegan más fuerte durante las transiciones de horario de verano, cuando las programaciones en hora local se disparan dos veces silenciosamente o saltan una ejecución. Usa el toggle UTC en esta herramienta para diseñar tu programación en UTC desde el principio.
- Evita la Trampa POSIX OR de Día del Mes / Día de la Semana
- Nunca restrinjas tanto día del mes COMO día de la semana a menos que quieras semántica OR. Si quieres "cada lunes en enero", escribe `0 0 * 1 1` (día del mes es `*`); si quieres "el día 1 de cada mes", escribe `0 0 1 * *` (día de la semana es `*`). La regla POSIX OR significa que `0 0 1 * 1` se ejecuta el día 1 Y cada lunes, casi seguro no es lo que pretendías. La vista previa de próxima ejecución detectará esto si revisas antes de desplegar.
- Fija la Zona Horaria de la Programación Explícitamente
- Los schedulers modernos soportan fijar la zona horaria en la definición de la programación: `CRON_TZ=America/New_York` al inicio de un crontab (vixie cron 3.0+), `spec.timeZone: "America/New_York"` para CronJobs de Kubernetes 1.27+, expresión de programación con `ScheduleExpressionTimezone` para AWS EventBridge Scheduler. Fija la zona horaria explícitamente en lugar de depender del default del servidor: las zonas horarias del servidor pueden cambiar sin aviso durante migraciones de infraestructura.
- Distribuye la Carga Entre Minutos, No en :00
- Evita `0 * * * *` (cada hora en el minuto 0) para trabajos no críticos: a escala, programar muchas cosas exactamente en :00 crea picos de carga. Elige un desplazamiento de minuto aleatorio (`23 * * * *`, `41 * * * *`) para cada trabajo para distribuir la carga. Lo mismo aplica para trabajos diarios: `30 3 * * *` es más amigable con tu base de datos que `0 3 * * *` cuando muchos trabajos convergen a las 3:00.
- Haz los Trabajos Idempotentes
- Cron no tiene reintento integrado, ni prevención de superposición, ni recuperación de ejecuciones perdidas. Tu trabajo debe ser seguro de ejecutar múltiples veces (idempotente) y auto-verificable. En lugar de "enviar reporte a las 9 AM", diséñalo como "enviar el reporte de hoy si aún no se ha enviado": esto se auto-repara tras caídas, programaciones duplicadas accidentales y ejecuciones concurrentes. La idempotencia es una propiedad del trabajo, no del scheduler, y es la práctica de fiabilidad más importante.
- Añade un Heartbeat para Programaciones Críticas
- El modo de fallo silencioso de cron es su mayor debilidad: si la programación no se dispara, nada te lo dice. Para trabajos críticos, haz que el trabajo haga ping a un servicio de heartbeat (Healthchecks.io, Cronitor, Dead Man's Snitch) al final de cada ejecución; el servicio te alerta si el ping esperado no llega. Esto detecta tanto que el trabajo falle como que la propia programación falle. La capa gratuita cubre la mayoría de necesidades personales y de equipos pequeños.
- Verifica con la Vista Previa Antes de Desplegar
- Antes de desplegar una nueva programación cron, mira las cinco próximas fechas de ejecución en la vista previa de esta herramienta. Alterna entre Local y UTC. Confirma que la programación cae cuando pretendes, no cinco minutos antes, no en el día equivocado, no saltándose el fin de semana que te importaba. La vista previa es la prueba de producción más barata posible.
Preguntas Frecuentes
¿Qué hace esta herramienta?
¿Qué es una expresión cron?
¿Mis datos se suben a algún lado?
¿Cuál es la diferencia entre cron POSIX y Quartz?
¿Por qué '0 0 1 * 5' se ejecuta cada viernes Y el día 1?
¿Cómo ejecuto un trabajo cada 30 segundos?
¿Qué zona horaria usa cron?
¿A qué se expande realmente '*/15'?
¿Puedo usar una expresión de seis campos con segundos?
¿Cuál es el intervalo máximo que cron puede expresar?
¿Cómo manejo ejecuciones perdidas después de una caída?
¿Por qué mi cron de GitHub Actions no se ejecuta a tiempo?
Herramientas relacionadas
Ver todas las herramientas →Convertidor de Timestamp Unix y Epoch — Multi-Precisión
Fecha y Hora
Convierte timestamps Unix a fechas al instante con nuestro convertidor epoch gratuito. Detecta automáticamente segundos, milisegundos y microsegundos. Reloj en vivo, bidireccional. Sin registro, 100% privado.
Conversor de Bases — Binario, Hex, Decimal, Octal
Herramientas de Conversión
Convierte números entre binario, hexadecimal, decimal, octal y cualquier base personalizada (2-36) al instante. Gratis, privado, sin registro — todo el procesamiento ocurre en tu navegador.
Decodificador y Codificador Base64
Codificación y Formato
Decodifica y codifica Base64 online de forma gratuita. Conversión en tiempo real con soporte completo de UTF-8 y emojis. 100% privado — funciona en tu navegador. Sin registro.
Convertidor de CSV a JSON
Codificación y Formato
Convierte CSV a JSON en tu navegador. RFC 4180, inferencia de tipos, fila de cabecera, seguro para big-int. 100% privado, sin carga.
Comprimir Imágenes Online — JPEG, PNG y WebP
Herramientas de Conversión
Reduce el tamaño de las imágenes hasta un 80% — comprime JPEG, PNG y WebP en tu navegador, sin subir archivos. Lotes de 20 imágenes, ajusta la calidad, compara antes y después. Gratis y privado.
JSON Diff (Comparar)
Codificación y Formato
Compara dos archivos JSON al instante en tu navegador. Resaltado lado a lado, salida RFC 6902 JSON Patch, ignora campos ruidosos como marcas de tiempo e IDs. 100% privado, sin carga.