Un generador de expresiones cron que además te dice qué hace la tuya.
Armá el horario con presets, o pegá cualquier expresión de 5 campos y te la explica en castellano llano con las próximas 3 corridas. Entiende pasos, rangos y nombres de día, te avisa de la regla OR de día-del-mes y día-de-semana, y rechaza los tokens no portables en vez de adivinar. 100% offline.
¿Ya tenés Toolbox? Abrí este widget
Cada 15 minutos, entre las 09:00 y las 17:00, los lunes a viernes
Escribí un cron y leelo en castellano
Cambiá la expresión y mirá qué significa y cuándo corre. Se evalúa en tu navegador.
100% local · cinco campos: minuto, hora, día del mes, mes, día de la semana
Leé una expresión, o armala sin memorizar el orden de los campos.
Pegás una expresión y el widget contesta tres preguntas de una vez: si es válida, qué significa y cuándo corre la próxima vez. La explicación es una frase —«Cada 15 minutos, entre las 09:00 y las 17:00, los lunes a viernes»— y abajo están las próximas tres fechas reales, que es lo que convierte una discusión abstracta sobre campos en algo que podés verificar.
Para el otro lado, los presets de Armar cubren los horarios que la gente escribe en la práctica: cada 5 minutos, cada hora, todos los días a las 09:00, lunes a viernes 09:00, lunes 08:00, el día 1 a medianoche. Elegís uno, lo ajustás y copiás el resultado a tu crontab, tu manifiesto de CronJob o la config de tu CI.
Cuando algo está mal, el error nombra el campo en vez de decir solo «inválido»: cuántos campos pasaste, qué campo está fuera de rango o qué token no se puede parsear.
- Explicación en castellano llano + las próximas 3 corridas
- Presets para los seis horarios que todo el mundo termina escribiendo
- Alias
@daily,@hourly,@weekly… expandidos a sus 5 campos - Errores que nombran el campo y el token que molesta
- Botón de copiar y una leyenda de campos para no contar posiciones
A las 00:00, todos los días (expande a 0 0 * * *)
«El día 1, si cae lunes» no es lo que dice esa expresión.
Esta es la regla que rompe horarios en silencio: cuando los dos campos
—día del mes y día de semana— están restringidos, cron corre el job si se
cumple cualquiera de los dos. Así que 0 0 1 * MON no
significa «el día 1 del mes, si cae lunes». Significa el día 1 del mes, más
todos los lunes: unas cinco veces más seguido de lo que quiso quien la
escribió, que es cómo un job de facturación mensual termina corriendo semanal.
El widget implementa esa regla como es y, más importante, lo dice en pantalla cuando tu expresión cae en ese caso. La mayoría de los generadores te muestra una frase linda que se lee como un AND y te deja enterarte en producción.
- Semántica OR implementada, no aproximada
- Aviso explícito cuando los dos campos de día están restringidos
- Las próximas 3 corridas hacen visible al toque las ejecuciones de más
- Rangos que dan la vuelta (
fri-mon) y domingo como 0 o 7
A las 00:00, el día 1 o los lunes
Cron estándar, y un «no» honesto a todo lo demás.
El parser cubre lo que el cron portable tiene de verdad: el comodín, listas,
rangos, pasos en sus tres formas (*/15, 9-17/2,
5/15), nombres de mes, nombres de día, rangos de día de semana que
dan la vuelta al fin de semana, y domingo escrito como 0 o como
7.
Lo que rechaza a propósito: L, W, # y
?. Esos son de Quartz y Spring, no del crontab, ni de los CronJob
de Kubernetes, ni de la mayoría de los schedulers de CI — así que una expresión
que los usa no es portable a donde probablemente la vas a pegar. Una
herramienta que los aceptara en silencio te estaría contando un horario que
nunca va a pasar.
- Comodín, listas, rangos y las tres formas de paso
- Nombres:
JAN-DEC,SUN-SAT,mon-fri - Rangos que dan la vuelta tipo
fri-mon; domingo como 0 o 7 - Rechaza
L W # ?y@reboot, con el motivo
*✓* * * * *L W #—0 0 L * *@reboot—no es un horarioSe instala del catálogo, con un click.
Cron Wizard no viene embebido en la app: es un widget del catálogo de Webstarted Toolbox. Descargás Toolbox, abrís el tab del catálogo (🧰), tocás el «+» al lado de Cron Wizard y aparece en tu tab Dev tools. Sin reinstalar, sin actualizar la app. Algunos de sus vecinos:
Dudas, respondidas.
¿Qué significa mi expresión, en castellano?
De eso se trata el widget: pegás los cinco campos —minuto, hora, día del mes, mes, día de semana— y te lo escribe en una frase, y abajo te lista las próximas 3 veces que va a correr de verdad. Ver «A las 09:00, de lunes a viernes» al lado de tres fechas reales es lo que agarra el error antes de deployarlo.
¿Por qué mi cron corre días que no esperaba?
Casi siempre es la regla OR de día-del-mes y día-de-semana. Cuando esos dos campos están restringidos, cron corre si se cumple CUALQUIERA de los dos, no los dos juntos. Así que «0 0 1 * MON» no significa «el día 1, si cae lunes»: significa el día 1 del mes Y todos los lunes. El widget te lo avisa explícitamente cuando tu expresión cae en ese caso, que es justo lo que la mayoría de los generadores te deja descubrir en producción.
¿Qué sintaxis soporta?
Cron estándar de 5 campos: «*», listas (1,15), rangos (1-5), pasos (*/15, 9-17/2, 5/15), nombres de mes y de día (JAN, mon-fri), rangos de día de semana que dan la vuelta (fri-mon) y domingo escrito como 0 o como 7. Más los alias @yearly, @annually, @monthly, @weekly, @daily, @midnight y @hourly, que expande a los cinco campos equivalentes para que veas qué son en realidad.
¿Por qué rechaza L, W, # y ?
Porque son extensiones, no cron. «L» (último día), «W» (día hábil más cercano), «#» (n-ésimo día de semana) y «?» vienen de Quartz y Spring; el crontab común, los CronJob de Kubernetes y la mayoría de los schedulers de CI no los entienden. Antes que fingir que los parsea y darte una respuesta equivocada, el widget te dice que el token no es portable. Lo mismo con @reboot: no es un horario, así que no hay nada que explicar ni predecir.
¿Necesito estar conectado?
No. El parseo y el cálculo de próximas corridas pasan localmente: no sale ningún pedido, así que la expresión que estás debugueando (y lo que revela del schedule de tu infraestructura) se queda en tu máquina. Los nombres de día y de mes están dentro del widget en vez de salir del locale del sistema, así que la misma expresión siempre se lee igual.
¿Es gratis?
Sí. Webstarted Toolbox es gratis y no pide cuenta, y Cron Wizard es un widget gratuito de su catálogo: lo instalás con un click desde la app.
Descargá Webstarted Toolbox
Gratis. Bajás la app y después agregás Cron Wizard del catálogo con un click. macOS 12+ y Windows 10+.
Un ícono, muchas mini-tools
Este es solo uno de los widgets de Webstarted Toolbox. Mirá los demás: