El peor error de producción que he causado fue un personaje en una expresión cron. Quería que se ejecutara una copia de seguridad de la base de datos todas las noches a medianoche. Escribí 0 0 * * * en mi cabeza, mecanografiado 0 0 * * 0 entró en la crontab y siguió adelante. El trabajo funcionó una vez, el domingo siguiente, y no nuevamente durante una semana. Lo descubrí cuando necesitaba una copia de seguridad que no existía. Ese único dígito extraviado se convirtió en "todos los días" en "todos los domingos," y nada en la sintaxis me lo advirtió. Cron hace exactamente lo que le cuentas, en silencio, para siempre.
TL;Dr: los Generador de expresión cron crea una expresión crontab estándar de cinco campos a partir de campos simples o ajustes preestablecidos con un solo clic, la explica en una oración a medida que escribe y obtiene una vista previa de los siguientes tiempos de ejecución en UTC para que pueda confirmar el cronograma antes de que llegue a producción. Se ejecuta completamente en su navegador, sin cuenta ni carga.
Creé esta herramienta para Toolz.dev porque nunca más quise confirmar un cronograma que solo había verificado en mi cabeza. Leer una expresión cron en inglés sencillo y ver las fechas reales en las que se disparará capta el 0 -versus- * clase de error al instante. Esta guía cubre cómo funciona la sintaxis cron, las interacciones que hacen tropezar a casi todos y cómo usar el generador para producir una expresión en la que pueda confiar.
¿qué es una expresión cron?
Una expresión cron es un cronograma compacto formado por cinco campos separados por espacios. De izquierda a derecha son minuto, hora, día del mes, mes y día de la semana. La forma de cinco campos la especifica POSIX en el formato de entrada crontab. Un programador: el clásico Unix cron daemon, pero también los sistemas CI, Kubernetes CronJobs e innumerables corredores de tareas: lee la expresión y activa tu trabajo en cada momento que coincida con todos los campos.
Cada campo acepta más de un número. Una estrella (*) significa "every" valor de ese campo. Una lista como 1,15,30 significa varios valores específicos. Un rango como 1-5 significa un lapso inclusivo. Un paso como */15 significa "cada quince yquot; valor a partir del campo's mínimo. Los combina en los cinco campos para describir casi cualquier horario recurrente: cada minuto, cada cuarto de hora, de lunes a viernes a las 8 a. m., el primero de cada mes, el último trimestre y el #39;s día de apertura. La potencia es real, al igual que la densidad: cinco campos pueden codificar un horario sorprendentemente preciso, razón por la cual es fácil equivocarse sutilmente.
Aquí está el diseño de campo que utiliza el generador, con el rango válido para cada uno:
| Posición | prado | Rango | notas |
|---|---|---|---|
| 1 | minutero | 0–59 | |
| 2 | hora | 0–23 | Reloj de 24 horas |
| 3 | día del mes | 1–31 | |
| 4 | mes | 1-12 | JAN-DEC también aceptado |
| 5 | día de la semana | 0-6 | 0 y 7 significan domingo; SUN-SAT aceptado |
¿Por qué generar la expresión en lugar de escribirla a mano
Escribir cron a mano es una apuesta en la que recuerdas correctamente el orden de los campos, los rangos y las interacciones, sin retroalimentación hasta que el trabajo se ejecuta o falla. El generador reemplaza esa apuesta con confirmación. Al completar los campos, hace tres cosas a la vez.
Primero, ensambla y valida la expresión, capturando valores fuera de rango, rangos invertidos y pasos mal formados con un mensaje que nombra el campo ofensivo. Una expresión como 0 25 * * * - la hora 25 no existe - se rechaza con una explicación en lugar de aceptarse y nunca se ejecuta en silencio.
En segundo lugar, presenta el cronograma como una oración. 0 8 * * 1-5 se convierte en "A las 08:00 de lunes a viernes." Leer el horario con palabras es la forma más rápida de notar que lo que construiste no es lo que quisiste decir. Mi error de copia de seguridad de medianoche habría sido obvio en el instante en que leí "A las 00:00 del domingo" en lugar de "A las 00:00."
En tercer lugar, muestra una vista previa de los próximos tiempos de ejecución reales. Ver que un trabajo se activará próximamente en tres meses en lugar de esta noche le dice que algo anda mal mucho más visceralmente que mirar asteriscos. Esta vista previa también capta horarios imposibles: solicite el 30 de febrero y el generador no muestra ninguna ejecución próxima, porque no las hay.
Cómo utilizar el generador de expresión Cron
Paso 1: comience desde un ajuste preestablecido o una pizarra en blanco
La ruta más rápida hacia una expresión correcta es comenzar desde una que ya esté cerca. Elija un ajuste preestablecido como " Días laborables a las 8 a. m., " " Cada 15 minutos, " o "Primero de mes a medianoche, " y los campos se cargan listos para ajustarse. Si ninguno encaja, comience desde el valor predeterminado de cada minuto y edite. Los ajustes preestablecidos existen porque la mayoría de los horarios reales son variaciones de una docena de patrones comunes y, a partir de una expresión de bien conocido, se elimina toda una categoría de errores.
Paso 2: establece los cinco campos
Ingrese un valor en cada campo o déjelo como * para "every." Cada campo acepta un valor único, una lista de comas, un rango de guiones o un paso de barra diagonal. Por ejemplo, para ejecutar al principio de cada hora durante el horario comercial de lunes a viernes, establezca el minuto en 0, ora a 9-17, y día de la semana a 1-5, dejando día del mes y mes como *. La sugerencia debajo de cada campo le recuerda su rango válido para que no tenga que memorizar el pedido.
Paso 3: lea la descripción en inglés sencillo
Mire la actualización de la descripción mientras escribe. Este es el paso que le ahorra. Si la oración no coincide con el cronograma de su cabeza, la expresión es incorrecta y se enteró en el navegador en lugar de en producción una semana después. Confirme la hora, los días y cualquier restricción mensual lean como desee.
Paso 4: verifique las siguientes ejecuciones y cópielas
Haga clic para obtener una vista previa de los próximos tiempos de ejecución, calculados en UTC. Escanéelos en busca de algo sorprendente: un espacio demasiado largo, una primera ejecución demasiado lejana o una lista vacía que indique una fecha imposible. Cuando el cronograma se vea bien, copie la expresión y péguela en su crontab, canalización o manifiesto de CronJob.
La trampa del día del mes y del día de la semana
Si recuerdas algo sobre cron, hazlo así, porque sorprende a casi todos la primera vez. Cuando a la vez el campo del día del mes y el campo del día de la semana están restringidos, lo que significa que ninguno de los dos lo está * - cron estándar los combina con OR, no con AND. El trabajo funciona cuando uno u otro condiciones coinciden.
Entonces 0 0 13 * 5 no significa " medianoche del viernes 13." Significa " medianoche del día 13 de cada mes, y también medianoche de cada viernes." Esos son horarios muy diferentes; el segundo se dispara muchas veces al mes. Este comportamiento proviene directamente de la implementación original de Vixie cron que heredan la mayoría de los programadores, y el generador lo honra exactamente. Su vista previa de próxima ejecución le mostrará tanto los días 13 como los viernes, que es la forma más clara posible de detectar un quirófano no deseado.
La regla práctica: dejar uno de los dos campos diurnos como * a menos que realmente quieras el comportamiento OR. Si realmente necesitas " Viernes 13 solamente, " cron no puede expresarlo en una sola expresión: manejas esa lógica en tu trabajo. Ver las fechas reales de ejecución en la vista previa es lo que convierte esto de un acechado gotcha en un hecho obvio y visible.
Pasos, rangos y listas en la práctica
La sintaxis de pasos es donde vive mucha potencia de programación y donde comienza mucha confusión. */5 en el campo de minutos significa minutos 0, 5, 10, 15, etc. a 55 - "cada cinco minutos." Puedes anclar un paso a un rango: 0-30/10 significa minutos 0, 10, 20 y 30 únicamente. Un valor mínimo con un paso, como 5/15 en el campo de minutos, significa " comenzando en 5, cada 15" hasta el máximo del campo: 5, 20, 35, 50.
Las listas y rangos se combinan libremente. 1,4,7,10 en el campo mes, le ofrece un calendario trimestral: enero, abril, julio y octubre. 1-5 en día de semana te da de lunes a viernes. 9-17 en el campo de horas te ofrece una ventana de nueve a cinco. Mezclándolos, 0 9-17 * * 1-5 se lee como " en el minuto 0 de cada hora de 9 a. m. a 5 p. m., de lunes a viernes " - un latido común en horas de negocios. El generador amplía y valida todo esto, y la descripción detalla lo que usted creó para que no haya ambigüedad sobre, digamos, si un rango es inclusivo (lo es).
Casos de uso comunes
Copias de seguridad y mantenimiento programados. El trabajo cron canónico. Generar 0 2 * * * para una copia de seguridad nocturna a las 2 a. m., lea la descripción para confirmar que es diaria y no semanal, y obtenga una vista previa de las próximas ejecuciones para asegurarse de que la primera sea esta noche. Este es exactamente el error que cometí hace años y el exacto que previene la vista previa.
CI y cronogramas de implementación. Las compilaciones nocturnas, las ejecuciones de prueba programadas y las implementaciones periódicas utilizan la sintaxis cron en GitHub Actions, GitLab CI y sistemas similares. Cree la expresión aquí, confírmela y péguela en su archivo de flujo de trabajo. Debido a que estos sistemas se ejecutan en sus propios servidores, tenga en cuenta la advertencia de zona horaria a continuación.
Canalizaciones de datos e informes. Un informe semanal todos los lunes a las 6 am es 0 6 * * 1; un resumen mensual del primero es 0 0 1 * *; un trabajo trimestral es 0 0 1 1,4,7,10 *. Generarlos y leerlos detiene el clásico "ran en el día equivocado" incidente de tubería.
Calentamiento de caché y latidos del corazón. Trabajos de alta frecuencia como */5 * * * * mantenga los cachés calientes o las comprobaciones de estado funcionando. La vista previa confirma que el intervalo es lo que espera en lugar de, digamos, una vez por hora porque coloca el paso en el campo equivocado.
Cron de aprendizaje. Si todavía estás construyendo la intuición, el generador es una herramienta de enseñanza. Escriba una expresión, lea la oración, vea las ejecuciones y el mapeo entre sintaxis y comportamiento se vuelve concreto de una manera que la documentación por sí sola nunca logra.
Una nota sobre zonas horarias
La vista previa de la siguiente ejecución calcula las horas en UTC, por lo que el resultado es determinista y el mismo para todos los que leen esto. Sin embargo, los demonios cron reales se ejecutan en la zona horaria local del servidor ' a menos que se configure lo contrario, y los proveedores de CI tienen cada uno su propia convención; muchos de ellos tienen por defecto UTC, algunos no. La expresión en sí no lleva zona horaria; es el programador el que decide. Entonces, cuando mueve una expresión de esta herramienta a un sistema en vivo, confirme esa zona horaria s y compense los tiempos de ejecución en su cabeza en consecuencia. A 0 0 * * * el trabajo es medianoche, pero medianoche donde depende completamente de dónde se ejecuta el trabajo. Si necesita razonar sobre las compensaciones de zonas horarias, el convertidor de zona horaria es útil y el convertidor timestamp ayuda cuando los registros de su programador se ejecutan como marcas de tiempo de Unix.
Generar versus analizar una expresión
Esta herramienta construye una expresión a partir de campos. Su hermano, el Analizador de expresión de cron, va en sentido contrario: pega una expresión existente, la explica y muestra una vista previa de sus ejecuciones. Los dos cubren las dos direcciones del mismo problema. Utilice el generador cuando conozca el horario que desea y necesita la sintaxis; utilice el analizador cuando haya heredado una expresión y necesite comprender qué hace. Ambos respetan la misma semántica Vixie-cron, incluida la regla del día del mes O del día de la semana, por lo que la descripción que lea en uno coincide con el comportamiento que vería en el otro. Juntos son un par pequeño y enfocado dentro del kit más amplio que describo en el Kit de herramientas para desarrolladores web descripción general y más amplio Guía de herramientas de codificación.
Privacidad: todo se ejecuta en tu navegador
No hay nada que cargar aquí y no hay nada cargado. La expresión se construye, valida, describe y simula completamente en el código del lado del cliente. Eso importa más de lo que parece: los horarios de trabajo internos pueden revelar cosas sobre la arquitectura y la cadencia de un sistema 's que no le gustaría incluir en un tercero 's registros. Puede confirmar que la herramienta es autónoma desconectándose de Internet; sigue funcionando. Este es el mismo principio del lado del cliente detrás de cada herramienta en Toolz.dev, que defiendo plenamente en el Privacidad de datos en herramientas en línea artículo.
preguntasrán el
¿Cómo escribo una expresión de cron?
Una expresión cron estándar tiene cinco campos separados por espacios: minuto, hora, día del mes, mes y día de la semana. Cada campo es un valor específico, una lista, un rango, un paso o * para cada. Por ejemplo, 0 8 * * 1-5 significa a las 08:00 de lunes a viernes. Esta herramienta construye la expresión para ti y muestra lo que significa sobre la marcha.
¿Qué significan los cinco campos cron?
De izquierda a derecha son minuto (0-0-59), hora (0-0-23), día del mes (1-11), mes (1-12) y día de la semana (0-6, donde 0 y 7 significan domingo). Una estrella en un campo significa "every" valor de ese campo. La herramienta etiqueta cada campo para que no tengas que recordar el orden.
que hace */5 ¿significa en cron?
La barra introduce un valor de paso. En el campo de minutos, */5 significa "cada 5 minutos" - 0, 5, 10, 15, etc. También puedes combinar pasos con rangos: 0-30/10 en el campo de minutos significa los minutos 0, 10, 20 y 30. Los pasos son la forma estándar de expresar "cada N unidades."
¿Por qué mi trabajo funciona con más frecuencia de lo esperado con el día del mes y el día de la semana establecidos?
Esta es la sorpresa más común. Cuando tanto el campo del día del mes como el del día de la semana están restringidos (ninguno lo está *), el cron estándar los trata como OR, no AND: el trabajo se ejecuta cuando cualquiera de las condiciones coincide. Entonces 0 0 13 * 5 corre el día 13 del mes y todos los viernes, no sólo el viernes 13. Deja un campo como * a menos que realmente quieras el comportamiento de OR.
¿En qué zona horaria se muestran los próximos tiempos de ejecución?
La vista previa calcula las próximas ejecuciones en UTC, por lo que el resultado es el mismo para todos. Los demonios cron reales usan la zona horaria del servidor (o una configuración TZ), por lo que si su servidor se ejecuta en una zona diferente, compense los tiempos en consecuencia. La expresión en sí no lleva zona horaria: es el programador el que decide.
¿Puedo usar nombres como Mon o Jan en lugar de números?
Sí. El campo del mes acepta JAN hasta DEC y el campo del día de la semana acepta SUN hasta SAT, sin sentido para casos. La herramienta los entiende al validar y describir su expresión. Los valores numéricos son más portátiles entre los programadores, por lo que el generador emite números, pero la entrada con nombre es totalmente compatible.
¿Es esto lo mismo que la sintaxis de crontab?
Sí, esto genera cron Unix/Vixie estándar de cinco campos utilizado por crontab, la mayoría de los sistemas CI y Kubernetes CronJobs. Algunos programadores agregan un campo de sexto segundo o extensiones no estándar como @reboot; esos no forman parte del estándar de cinco campos. Para la gran mayoría de las necesidades de programación, la expresión de cinco campos que produce esta herramienta es exactamente lo que desea.
¿Mi agenda se envía a alguna parte?
No. La expresión se construye, valida, describe y simula completamente en su navegador con código del lado del cliente. No se carga ni almacena nada. Puede confirmarlo desconectándose de Internet: el generador aún funciona.



