Analizador de Expresiones Cron preview

Analizador de Expresiones Cron

Analiza expresiones cron en texto legible. Ve los proximos tiempos de ejecucion y usa ejemplos predefinidos.

Caracteristicas principales

  • Explicaciones de cron legibles para humanos
  • Vista previa de las próximas 5 ejecuciones
  • Expresiones predefinidas comunes
  • Desglose visual de los campos

Guide

Cron es un sistema de programación de tareas basado en el tiempo usado en sistemas operativos tipo Unix para ejecutar comandos o scripts en intervalos específicos. Una expresión cron es una cadena compacta que define una programación usando cinco campos: minuto, hora, día del mes, mes y día de la semana. A pesar de ser uno de los formatos de programación más usados en informática, las expresiones cron son notoriamente difíciles de leer de un vistazo. Esta guía cubre la sintaxis en detalle, cómo leer y escribir expresiones, patrones comunes y casos de uso prácticos. Los cinco campos de una expresión cron estándar se disponen de izquierda a derecha: minuto (0-59), hora (0-23), día del mes (1-31), mes (1-12) y día de la semana (0-7, donde tanto 0 como 7 representan el domingo). Cada campo acepta valores específicos, rangos, listas y caracteres especiales. Una expresión completa como 30 14 * * 1-5 significa a las 14:30 en cada día de lunes a viernes. El intérprete de cron de WebRecast traduce estas expresiones a lenguaje claro y muestra las próximas horas de ejecución programadas. El asterisco (*) es el carácter comodín que significa cada valor posible. En el campo de minuto, * significa cada minuto. En el campo de mes, * significa cada mes. Cuando los cinco campos son asteriscos (* * * * *), la tarea se ejecuta cada minuto de cada hora de cada día. Esta es la expresión cron más simple y también una de las más peligrosas en producción si no tienes intención de ejecutar algo con esa frecuencia. El carácter barra (/) especifica valores de paso. */5 en el campo de minuto significa cada 5 minutos (0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55). */2 en el campo de hora significa cada 2 horas (0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22). Puedes combinar pasos con rangos: 1-30/5 en el campo de minuto significa cada 5 minutos durante la primera media hora (1, 6, 11, 16, 21, 26). Los pasos facilitan crear intervalos regulares sin listar cada valor. La coma (,) crea una lista de valores específicos. 1,15 en el campo de día del mes significa los días 1 y 15 del mes. 0,30 en el campo de minuto significa al inicio de la hora y a los 30 minutos. MON,WED,FRI en el campo de día de la semana (si tu implementación de cron admite nombres) significa lunes, miércoles y viernes. Las listas son útiles cuando tu programación no sigue un intervalo regular. El guion (-) define un rango. 9-17 en el campo de hora significa cada hora de 9 a 17 (de 9 AM a 5 PM). 1-5 en el campo de día de la semana significa de lunes a viernes. Los rangos son inclusivos, lo que significa que ambos extremos están incluidos. Puedes combinar rangos con pasos: 0-23/2 significa cada dos horas a lo largo del día, y 1-5 en el campo de día de la semana con */10 en el campo de minuto significa cada 10 minutos en días laborables. Algunas implementaciones de cron admiten caracteres adicionales. El signo de interrogación (?) se usa en algunos sistemas (como el planificador Quartz) para indicar que no hay un valor específico para el día del mes o el día de la semana cuando quieres especificar uno pero no el otro. El carácter L significa último (L en el campo de día del mes significa el último día del mes). El carácter W significa el día laborable más cercano (15W significa el día laborable más cercano al 15). El carácter almohadilla (#) especifica la enésima aparición de un día de la semana (2#3 significa el tercer martes del mes). El cron estándar de Unix no admite estos caracteres, pero aparecen en planificadores basados en Java y en servicios de cron de plataformas en la nube. Los patrones comunes de cron cubren la mayoría de las necesidades de programación. Ejecutar cada minuto: * * * * *. Ejecutar cada 5 minutos: */5 * * * *. Ejecutar cada hora en el minuto 0: 0 * * * *. Ejecutar a diario a medianoche: 0 0 * * *. Ejecutar a diario a las 3:30 AM: 30 3 * * *. Ejecutar semanalmente los domingos a medianoche: 0 0 * * 0. Ejecutar mensualmente el día 1 a medianoche: 0 0 1 * *. Ejecutar en días laborables a las 9 AM: 0 9 * * 1-5. Ejecutar cada 15 minutos durante el horario comercial en días laborables: */15 9-17 * * 1-5. La herramienta de interpretación de cron incluye estos preajustes comunes para referencia rápida. El manejo de la zona horaria es una consideración crítica que la propia expresión cron no aborda. Una expresión cron especifica una hora, pero ¿en qué zona horaria? En un servidor local, cron normalmente se ejecuta en la zona horaria del sistema del servidor. Las plataformas en la nube (AWS CloudWatch, Google Cloud Scheduler, Azure Logic Apps) te permiten especificar la zona horaria de forma explícita. Al programar tareas que dan servicio a una audiencia global o que se ejecutan en infraestructura en la nube, verifica y documenta siempre a qué zona horaria hacen referencia tus expresiones cron. Una tarea programada para 0 9 * * * significa las 9 AM en la zona horaria del servidor, que podría ser UTC, tu hora local o cualquier otra. El cambio de horario de verano crea casos límite en las programaciones de cron. Cuando los relojes se adelantan, la hora de 2:00 a 3:00 AM no existe. Una tarea programada a las 2:30 AM durante la transición de primavera puede omitirse o ejecutarse a las 3:00 AM según la implementación de cron. Cuando los relojes se retrasan, la hora de 1:00 a 2:00 AM ocurre dos veces. Una tarea programada en ese periodo podría ejecutarse dos veces o una vez según la implementación. Usar UTC para las programaciones de cron evita por completo los problemas del horario de verano, razón por la que muchos sistemas de producción se estandarizan en UTC. Las ejecuciones superpuestas ocurren cuando una tarea tarda más en completarse que el intervalo entre ejecuciones programadas. Si una tarea está programada cada 5 minutos pero a veces tarda 8, la siguiente ejecución empieza antes de que termine la anterior. Esto puede causar contención de recursos, corrupción de datos o procesamiento duplicado. El propio sistema cron no evita las ejecuciones superpuestas. Las soluciones incluyen usar archivos de bloqueo (la tarea comprueba si existe un archivo de bloqueo al inicio y sale si lo hay), usar flock (una utilidad de bloqueo de archivos) o usar un planificador de tareas con control de concurrencia integrado. El registro y la monitorización de las tareas de cron son esenciales para la fiabilidad en producción. Una tarea de cron que falla silenciosamente es peor que una que nunca se ejecutó. Dirige la salida de la tarea a archivos de registro añadiendo >> /var/log/myjob.log 2>&1 al comando de cron. Esto captura tanto la salida estándar como los errores. Configura la monitorización para que te avise cuando una tarea falle o no se ejecute según lo programado. Servicios como Healthchecks.io y Cronitor proporcionan monitorización tipo dead man's switch donde tu tarea de cron hace ping a una URL al completarse y recibes una alerta si el ping no llega a tiempo. Las diferencias de entorno entre tu shell interactivo y el entorno de cron causan muchos fallos de tareas de cron. Cuando cron ejecuta una tarea, usa un entorno mínimo que puede carecer de entradas PATH, variables de entorno y configuración de shell que tiene tu sesión interactiva. Si una tarea funciona cuando la ejecutas manualmente pero falla en cron, la causa probable sea una variable de entorno ausente o un ejecutable no encontrado porque no está en el PATH de cron. Las soluciones incluyen usar rutas absolutas para todos los ejecutables (/usr/bin/python3 en lugar de python3), definir variables de entorno de forma explícita al principio del crontab o cargar el perfil de shell al inicio del script de la tarea. El comando crontab gestiona tu programación de cron. crontab -e abre tu archivo crontab en un editor. crontab -l lista tus entradas actuales del crontab. crontab -r elimina todo tu crontab (úsalo con precaución). Cada línea del archivo crontab es un comentario (que empieza con #), una asignación de variable de entorno (MAILTO=admin@example.com) o una entrada de programación (los cinco campos de tiempo seguidos del comando a ejecutar). La variable MAILTO envía la salida de la tarea a una dirección de correo electrónico, un mecanismo de monitorización útil para configuraciones pequeñas. El cron de todo el sistema se gestiona mediante archivos en /etc/cron.d/, /etc/cron.daily/, /etc/cron.hourly/, /etc/cron.weekly/ y /etc/cron.monthly/. Estos directorios usan un formato ligeramente distinto que incluye un campo de nombre de usuario entre la programación y el comando, especificando qué cuenta de usuario ejecuta la tarea. Los paquetes del sistema y los scripts de administración del servidor normalmente usan estas ubicaciones en lugar de los crontabs individuales de usuario. Las alternativas modernas a cron incluyen los temporizadores de systemd en sistemas Linux, que ofrecen funciones como retrasos aleatorios, gestión de dependencias y mejor integración del registro. Las plataformas en la nube ofrecen sus propios servicios de programación: AWS EventBridge (antes CloudWatch Events), Google Cloud Scheduler, Azure Logic Apps y Kubernetes CronJobs. Estos servicios usan la sintaxis de expresiones cron pero añaden funciones como políticas de reintento, colas de mensajes muertos y paneles de monitorización. Entender la sintaxis de expresiones cron sigue siendo esencial porque todas estas herramientas modernas usan el mismo formato de cinco campos. Los Kubernetes CronJobs merecen una mención especial porque combinan la programación de cron con la orquestación de contenedores. Un Kubernetes CronJob crea un pod nuevo según la programación, ejecuta la tarea en un contenedor y limpia cuando la tarea se completa. El campo schedule usa la sintaxis estándar de cron. La configuración adicional controla la política de concurrencia (Allow, Forbid o Replace), los límites del historial de tareas correctas y fallidas, los segundos de plazo de inicio y la funcionalidad de suspensión. Si ejecutas cargas de trabajo en Kubernetes, los CronJobs son la forma estándar de programar tareas recurrentes. El intérprete de cron de WebRecast toma tu expresión y produce tres cosas: una explicación legible de la programación (en lenguaje claro, como cada 15 minutos en días laborables), un desglose de cada campo que muestra qué valores coinciden y las próximas 5 horas de ejecución programadas según la fecha y hora actuales. Esto facilita verificar que tu expresión hace lo que pretendes antes de desplegarla a producción. Introduce tu expresión, lee la explicación, comprueba las próximas horas de ejecución y confirma que la programación coincide con tus requisitos. Probar las expresiones cron antes del despliegue evita errores de programación que pueden tener consecuencias reales. Una tarea de copia de seguridad que se ejecuta cada hora en lugar de cada día desperdicia espacio en disco. Una tarea de facturación que se ejecuta a diario en lugar de mensualmente cobra de más a los clientes. Una tarea de limpieza que se ejecuta cada minuto en lugar de cada hora crea una carga de servidor innecesaria. Analiza y verifica siempre tu expresión cron con una herramienta como esta antes de añadirla a tu crontab o a la configuración de tu planificador en la nube. Los pocos segundos de verificación pueden evitar horas de depuración o algo peor.

Preguntas frecuentes

¿Qué es una expresión cron?

Una expresión cron es una cadena de 5 campos (minuto, hora, día, mes, día de la semana) que define una programación para tareas recurrentes.

¿Qué significa */5 en cron?

La sintaxis */5 significa "cada 5 intervalos". Por ejemplo, */5 en el campo de minutos significa cada 5 minutos.

Guias relacionadas

Secciones relacionadas de WebRecast