Herramientas de desarrollo · Generador de Crontab
Día del mes vs día de la semana en cron: la regla OR que sorprende a todos
· Cómo funciona
cron calendario programación
Cuando ambos campos de día están restringidos, cron ejecuta el trabajo si alguno coincide. Esta publicación explica la regla de crontab(5), por qué existe y cómo obtener las programaciones que impide.
El informe se publicó el día 1 y todos los lunes; la expresión 0 9 1 * 1 no significa lo que parece
Una expresión como `0 9 1 * 1` se parece a “09:00 el primer lunes” si las columnas de dos días se leen como filtros acumulativos. ToolAcre no lo lee de esa manera. Con el día del mes establecido en 1 y el día de la semana establecido en lunes, el analizador advierte que cualquiera de las condiciones puede coincidir, por lo que la programación incluye todos los primeros y todos los lunes.
Esta no es una preferencia de redacción menor. Un informe mensual puede ejecutarse cuatro o cinco veces más, y una operación prevista sólo los lunes también puede ejecutarse el primero de un mes. El generador coloca una advertencia que dice "Vale la pena comprobarlo" junto a la descripción para que el comportamiento expandido sea visible antes de copiar una expresión en un crontab externo.
La regla tal como está escrita: si tanto el día del mes como el día de la semana están restringidos, el comando se ejecuta cuando cualquiera de los campos coincide
La función `dayMatches` de la implementación maneja cuatro casos explícitamente. Se aceptan dos comodines en cada fecha; un día del mes comodín difiere del día de la semana; un día laborable comodín difiere del día del mes; y dos campos restringidos devuelven el OR lógico de sus coincidencias. Las pruebas cubren una fecha que coincide solo con el día trece, solo el viernes y ninguna condición.
Las descripciones conservan la misma regla. `0 0 13 * 5` se representa con "el día 13 del mes o el viernes", no es una conjunción ambigua. El análisis, la selección de la siguiente ejecución y la salida en inglés utilizan la misma interpretación. Ese comportamiento compartido es una evidencia más fuerte que una etiqueta de ayuda aislada porque el desacuerdo entre esos caminos crearía inmediatamente vistas previas engañosas.
El analizador implementa OR y expone la consecuencia; no establece la historia de la regla
El esquema del libro de trabajo ofrece una razón histórica para el diseño del quirófano, pero este repositorio demuestra el comportamiento más que la procedencia. Los comentarios del código identifican una regla estilo Vixie y las pruebas establecen el resultado modelado por ToolAcre. No documentan quién eligió la norma, cuándo se adoptó ni por qué se prefirió una interpretación permisiva.
Mantener ese límite es importante en la redacción técnica. Los lectores necesitan saber exactamente cómo esta herramienta amplía la expresión; no necesitan una narrativa de estándares inventada para utilizarla de manera segura. Si un destino de implementación documenta una semántica de días diferente, su propio manual supera a esta vista previa del navegador. ToolAcre indica el dialecto que calcula en lugar de afirmar que todos los programadores están de acuerdo.
Ejemplo resuelto: enumerar 0 9 1 * 1 durante un mes: los días que se activa, en comparación con el cronograma que quería el autor
Considere un mes cuyo primer día no sea el lunes. `0 9 1 * 1` produce una ejecución en la primera y ejecuciones adicionales cada lunes. Si el primero es el lunes, esa fecha todavía aparece una vez porque la búsqueda de la próxima ejecución considera un minuto del calendario, no dos activadores separados. El sindicato cambia de tamaño con el calendario pero no de lógica.
Puede inspeccionar esa unión eligiendo una zona horaria y leyendo las siguientes cinco ejecuciones. La vista previa comienza estrictamente después del instante actual y busca fechas del calendario, aplicando los campos de mes, día y hora. No promete un mes específico en la prosa del artículo porque la lista en vivo depende de cuándo y dónde el lector realiza la verificación.
Las soluciones alternativas del comando del primer lunes estilo AND están fuera de este generador de programación
El plan sugirió incorporar una prueba de fecha de shell para obtener el comportamiento AND. ToolAcre no puede verificar dicho comando: acepta solo los cinco campos de programación y su línea completa copiada contiene un ejecutable de marcador de posición. La sintaxis del Shell, el porcentaje de escape, la disponibilidad de los comandos y el comportamiento de salida pertenecen al entorno que eventualmente ejecuta el trabajo.
Dentro de este generador, la medida de diseño segura es dejar un campo de día como `*` a menos que la unión OR sea realmente intencionada. Para un requisito del primer lunes, documente que el cron de cinco campos por sí solo no expresa la intersección en este dialecto. Elija y pruebe una solución específica del entorno por separado en lugar de presentar un fragmento no ejecutado como se garantiza.
Otros operadores del programador no son interpretados por este analizador de cinco campos
Algunas gramáticas del programador exponen operadores como `#`, `L`, `W` o `?`, pero este analizador no acepta ninguno de ellos. También rechaza seis campos y explica que su contrato tiene una sintaxis crontab de cinco campos. Por lo tanto, una expresión que funcione en otro producto no se puede pegar aquí como evidencia de que existe la misma regla de calendario.
La traducción del dialecto comienza identificando las gramáticas de origen y de destino, no eliminando la puntuación hasta que la validación sea exitosa. ToolAcre puede ayudar a construir los cinco campos, nombres, rangos, listas y pasos ordinarios del objetivo. No puede preservar la semántica transmitida por un operador no compatible, y los artículos evitan deliberadamente describir a esos operadores extranjeros como si estuvieran implementados.
El escape del comando está fuera de la gramática de solo expresión
Los signos de porcentaje y las citas de comandos aparecen después de la programación y están fuera de `parseCron`. El analizador divide una expresión en exactamente cinco partes separadas por espacios en blanco; nunca lee una canalización de shell, un comando de fecha o una carga útil de comando escapado. En consecuencia, este artículo no enseña una solución alternativa con el signo de porcentaje a pesar de que el libro de trabajo propone una.
Esa omisión es una decisión de corrección. Una herramienta de programación no debe implicar que un comando sea seguro porque sus campos de tiempo validan. Revise la sintaxis del comando en la implementación cron y el shell reales, con entradas inofensivas y salidas observables. Mantenga el resultado del generador dentro del alcance de la regla del calendario que demuestre que comprende.
Conclusión: restrinja un campo de día, no ambos, y la explicación del generador hace que el OR sea visible antes de guardar la línea.
Cuando ambos campos de día estén restringidos, léalos como una unión y diga “o” en voz alta. Mejor aún, inspeccione la advertencia del generador y los próximos funcionamientos. Si esas fechas exceden el conjunto previsto, devuelva un campo a `*` y resuelva cualquier requisito más especializado con un mecanismo documentado por el entorno de destino.
La lección central no es que cron sea misterioso; es que dos columnas adyacentes no se combinan como las otras restricciones. ToolAcre centraliza esa excepción en la lógica de análisis, descripción y vista previa. Utilice esas tres vistas para detectar la falta de coincidencia antes de que una expresión abandone el navegador y se convierta en una programación operativa.