fixmint
ES

Cómo leer una expresión cron, campo por campo

Por · · 5 min de lectura

Una expresión cron es una línea corta de texto que indica a un programador de tareas cuándo ejecutar un trabajo. La forma habitual tiene cinco campos separados por espacios: minuto, hora, día del mes, mes y día de la semana. La línea 0 9 * * 1-5 significa de lunes a viernes a las 09:00. Cada campo es un número, un nombre, una lista, un rango o un paso, o * para todos los valores, y un trabajo se ejecuta en cada momento en que coinciden todos los campos.

Explicador de cronCron se ejecuta a otra horaÚsalo gratis

Los cinco campos

CampoValores permitidosEjemplo
Minuto0 a 5930 es el minuto 30 de la hora
Hora0 a 239 son las 09:00, en formato de 24 horas
Día del mes1 a 3115 es el día 15
Mes1 a 12, o JAN a DEC3 o MAR es marzo
Día de la semana0 a 6, o SUN a SAT0 o SUN es domingo, 1 es lunes

Algunos sistemas también aceptan 7 para el domingo, pero no todos, así que usa 0 o SUN. Cron no tiene campo de segundos en esta forma, así que el paso más pequeño es de un minuto.

Listas, rangos, pasos y nombres

  • significa todos los valores del campo. * * * * se ejecuta cada minuto.
  • Una lista usa comas. 0 9,17 * * * se ejecuta a las 09:00 y a las 17:00 todos los días.
  • Un rango usa un guion. 1-5 en el campo de día de la semana significa de lunes a viernes.
  • Un paso usa una barra. */15 en el campo de minuto significa 0, 15, 30 y 45. 10-30/5 significa 10, 15, 20, 25 y 30.
  • Los nombres, como MON-FRI, pueden sustituir a los números. Son más fáciles de leer, si tu programador los acepta.

Estas partes se combinan. 0 8-18/2 * * * se ejecuta en el minuto 0 de cada dos horas, de 08:00 a 18:00.

Horarios habituales

ExpresiónSignificado
* * * * *Cada minuto
/15 * * *Cada 15 minutos
0 * * * *En el minuto 0 de cada hora
0 2 * * *Todos los días a las 02:00
0 9 * * 1-509:00, de lunes a viernes
0 9,17 * * *09:00 y 17:00 todos los días
30 6 1 * *06:30 el día 1 de cada mes
0 0 * * 0Medianoche todos los domingos
0 0 1 1 *Medianoche del 1 de enero
/5 9-17 * 1-5Cada 5 minutos de 09:00 a 17:55, de lunes a viernes

Ten en cuenta que 0 0 * * es medianoche, y 0 12 * * es mediodía. Equivocarse con la hora es uno de los errores más comunes.

Día del mes y día de la semana

Cuando tanto el campo de día del mes como el de día de la semana están restringidos, el trabajo se ejecuta cuando coincide cualquiera de los dos. Es la regla clásica de Vixie cron y de muchos sistemas derivados de él. Así, 0 0 13 * 5 se ejecuta a medianoche el día 13 de cada mes y también todos los viernes. Mucha gente espera solo el viernes 13, y acaba con más ejecuciones de las previstas.

Si uno de los dos campos es *, solo cuenta el otro. Para ejecutar en viernes 13, programa un trabajo para cada viernes y comprueba la fecha dentro del script. Otros programadores, incluidos algunos servicios en la nube, pueden usar reglas distintas, así que lee su documentación.

Zonas horarias y horario de verano

Cron funciona según el reloj de la máquina o del servicio en el que se ejecuta, que normalmente es la zona horaria local de esa máquina. Un trabajo programado para las 02:30 se ejecuta a las 02:30 de ese reloj. Comprueba primero la zona (en Linux, date la muestra). Si quieres que los trabajos sigan un mismo reloj en todas partes, muchos equipos usan servidores en UTC, y algunos programadores permiten definir una zona horaria para cada trabajo.

El horario de verano cambia el reloj dos veces al año. En primavera, muchos lugares pasan de las 02:00 directamente a las 03:00, así que un trabajo a las 02:30 no tiene tiempo de ejecutarse. En otoño, la hora de 01:00 a 01:59 se repite dos veces. Los programadores tratan estos casos de forma distinta: algunos omiten el trabajo, otros lo ejecutan una vez y otros dos veces. Evita programar trabajos en la franja de cambio de la madrugada, o usa UTC, si la diferencia te importa.

Seis campos y Quartz

Algunos programadores añaden un campo de segundos al principio, así que /10 * * * * se ejecuta cada 10 segundos. El programador Quartz para Java usa segundos, minutos, horas, día del mes, mes, día de la semana y un año opcional, y añade cuatro caracteres especiales:

  • ? significa «ningún valor específico». Quartz lo exige en el campo de día del mes o en el de día de la semana, el que no uses.
  • L significa último. L en el campo de día del mes es el último día del mes, y 6L en el de día de la semana es el último viernes.
  • W significa el día laborable más cercano. 15W es el día laborable más próximo al 15, y no salta a otro mes.
  • # significa el n-ésimo día de la semana. 6#3 es el tercer viernes.

Quartz numera los días de forma distinta a la forma de cinco campos. Su 1 es domingo y 7 es sábado, así que de lunes a viernes es 2-6, no 1-5. Comprueba siempre qué formato usa tu programador antes de copiar una línea.

Errores habituales

  • */7 en el campo de minuto. Los valores son 0, 7, 14 y así hasta 56. El siguiente sería 63, que no existe, así que la ejecución posterior a 56 es en el minuto 0 de la hora siguiente. La separación es solo de cuatro minutos, y el espaciado es irregular. Usa un paso que divida 60 exactamente, como 5, 10, 15 o 30.
  • Febrero 30. Esa fecha no existe, así que 0 0 30 2 * nunca se ejecuta. Lo mismo pasa con el día 31 en un mes de 30 días. Con la regla de «uno u otro», una restricción de día de la semana puede seguir provocando ejecuciones en otros días, así que comprueba el resultado.
  • Hora 24 o minuto 60. Están fuera de rango. La mayoría de programadores los rechazan al guardar, pero no todos.
  • Esperar segundos. Una línea de cinco campos solo se ejecuta en minutos completos.
  • Confundir cron con las expresiones regulares. En cron, significa todos los valores. En una expresión regular, significa repetir el elemento anterior. Usa el Probador de expresiones regulares para los patrones, y mantén las líneas cron separadas.

Comprueba las próximas ejecuciones

Antes de fiarte de un horario, lee la línea en palabras sencillas y anota sus próximas horas de ejecución. El Explicador de cron hace ambas cosas, y es la forma más rápida de detectar la regla de «uno u otro» o un paso extraño.

Respuestas rápidas

¿El primer campo son minutos o segundos?

Minutos, en la forma estándar de cinco campos. Solo algunos programadores de seis campos añaden segundos, y los colocan primero.

¿Por qué mi trabajo se ejecuta los viernes y también el día 13?

Están configurados los campos de día del mes y de día de la semana, así que el trabajo se ejecuta cuando coincide cualquiera de los dos. Pon uno de los campos en * si quieres solo el otro.

¿Cron usa UTC?

Solo si la máquina o el servicio está configurado en UTC. Si no, usa la zona horaria local de ese sistema.

Traducido del Original en inglés con ayuda de IA.

Comentarios

    Aún no hay comentarios. Sé el primero.

    Tu valoración (opcional)

    Tu correo nunca se muestra ni se guarda.

    Portada de Agentic AI in the BrowserAgentic AI in the Browser

    Casos de uso para flujos de trabajo con IA en el navegador que priorizan la privacidad: la misma idea de hacerlo en tu propio dispositivo en la que se basa fixmint.

    $4.99Consíguelo en GumroadEn inglés