Skip to main content

Expresiones cron

Introducción

cron es una herramienta de UNIX que existe desde hace mucho tiempo, por lo que sus capacidades de programación son poderosas y probadas.

Las expresiones cron son poderosas, pero pueden ser bastante confusas. Este tutorial tiene como objetivo eliminar parte del misterio de la creación de una expresión cron, brindando a los usuarios un recurso que pueden visitar antes de tener que preguntar en un foro o lista de correo.

Formato

Una expresión cron es una cadena compuesta por 6 o 7 campos separados por espacios en blanco. Los campos pueden contener cualquiera de los valores permitidos, junto con varias combinaciones de los caracteres especiales permitidos para ese campo. Los campos son los siguientes:

Campo Obligatorio Valores permitidos Caracteres especiales permitidos
Segundos SI 0-59 , - * /
Minutos SI 0-59 , - * /
Horas SI 0-23 , - * /
Dia del mes SI 1-31 , - * ? / L W
Mes SI 1-12 or JAN-DEC , - * /
Día de la semana SI 1-7 or SUN-SAT , - * ? / L #
Año SI vacío, 1970-2099 , - * /

Entonces, las expresiones cron pueden ser tan simples como esto: * * * * ? *

o más complejo, así: 0/5 14,18,3-39,52 * ? ENE,MAR,SEP LUN-VIE 2002-2010

Caracteres especiales

  • * (“todos los valores”): se utiliza para seleccionar todos los valores dentro de un campo. Por ejemplo, "*" en el campo de minutos significa "cada minuto".

  • ? (“sin valor específico”): útil cuando necesita especificar algo en uno de los dos campos en los que se permite el carácter, pero no en el otro. Por ejemplo, si quiero que mi gatillo se dispare en un día particular del mes (digamos, el 10), pero no me importa qué día de la semana sea, pondría "10" en el día de -campo de mes y “?” en el campo del día de la semana. Consulte los ejemplos siguientes para obtener aclaraciones.

  • - - utilizado para especificar rangos. Por ejemplo, "10-12" en el campo de la hora significa "las horas 10, 11 y 12".

  • , - se utiliza para especificar valores adicionales. Por ejemplo, “MON,WED,FRI” en el campo de día de la semana significa “los días lunes, miércoles y viernes”.

  • / - utilizado para especificar incrementos. Por ejemplo, "0/15" en el campo de segundos significa "los segundos 0, 15, 30 y 45". Y "5/15" en el campo de segundos significa "los segundos 5, 20, 35 y 50". También puede especificar '/' después del carácter ''; en este caso, '' equivale a tener '0' antes de '/'. '1/3' en el campo del día del mes significa "disparar cada 3 días a partir del primer día del mes".

  • L (“último”) - tiene un significado diferente en cada uno de los dos campos en los que está permitido. Por ejemplo, el valor "L" en el campo del día del mes significa "el último día del mes": el día 31 de enero, el día 28 de febrero en años no bisiestos. Si se usa solo en el campo del día de la semana, simplemente significa "7" o "SAT". Pero si se usa en el campo del día de la semana después de otro valor, significa "el último día xxx del mes"; por ejemplo, "6L" significa "el último viernes del mes". También puede especificar una compensación desde el último día del mes, como "L-3", que significaría el penúltimo día del mes calendario. Al usar la opción 'L', es importante no especificar listas o rangos de valores, ya que obtendrá resultados confusos/inesperados.

  • W ("día de la semana"): se utiliza para especificar el día de la semana (de lunes a viernes) más cercano al día dado. Por ejemplo, si especificara "15 W" como valor para el campo del día del mes, el significado es: "el día de la semana más cercano al día 15 del mes". Entonces, si el día 15 es sábado, el gatillo se disparará el viernes 14. Si el día 15 es domingo, el gatillo se disparará el lunes 16. Si el día 15 es martes, se disparará el martes 15. Sin embargo, si especifica "1W" como el valor para el día del mes, y el primero es un sábado, el disparador se activará el lunes 3, ya que no "saltará" el límite de los días de un mes. El carácter 'W' solo se puede especificar cuando el día del mes es un solo día, no un rango o una lista de días.

    Los caracteres 'L' y 'W' también se pueden combinar en el campo del día del mes para producir 'LW', que se traduce como *"último día de la semana del mes"*.

  •  #: se usa para especificar "el enésimo" día XXX del mes. Por ejemplo, el valor de “6#3” en el campo del día de la semana significa “el tercer viernes del mes” (día 6 = viernes y “#3” = el 3er del mes). Otros ejemplos: “2#1” = el primer lunes del mes y “4#5” = el quinto miércoles del mes. Tenga en cuenta que si especifica "#5" y no hay 5 del día de la semana dado en el mes, entonces no ocurrirá ningún disparo ese mes.

Los caracteres legales y los nombres de meses y días de la semana no distinguen entre mayúsculas y minúsculas. MON es lo mismo que mon.

Ejemplos

Puede encontrar varias herramientas en línea muy útiles,  que pueden ayudarlo a crear su propia expresión cron como estas: http://www.cronmaker.com, https://crontab.guru

Aquí hay algunos ejemplos completos:

**Expresión** **Significado**
0 0 12 * * ? Dispara a las 12pm (mediodía) todos los días
0 15 10 ? * * Dispara a las 10:15am todos los días
0 15 10 * * ? Dispara a las 10:15am todos los días
0 15 10 * * ? * Dispara a las 10:15am todos los días
0 15 10 * * ? 2005 Dispara a las 10:15am todos los días durante el año 2005
0 * 14 * * ? Dispara cada minuto desde las 14:00 hasta las 14:59, todos los días
0 0/5 14 * * ? Dispara cada 5 minutos desde las 14:00 hasta las 14:55, todos los días
0 0/5 14,18 * * ? Dispara cada 5 minutos a partir de las 14:00 y finalice a las 14:55, Y dispare cada 5 minutos a partir de las 18:00 y finalice a las 18:55, todos los días
0 0-5 14 * * ? Dispara cada minuto desde las 14:00 hasta las 14:05, todos los días
0 10,44 14 ? 3 WED Dispara a las 14:10 ya las 14:44 todos los miércoles del mes de marzo.
0 15 10 ? * MON-FRI Dispara a las 10:15am todos los lunes, martes, miércoles, jueves y viernes
0 15 10 15 * ? Dispara a las 10:15 am el día 15 de cada mes
0 15 10 L * ? Dispara a las 10:15 am el día 15 de cada mes
0 15 10 L-2 * ? Dispara a las 10:15 a. m. del penúltimo día de cada mes
0 15 10 ? * 6L Dispara a las 10:15 am el último viernes de cada mes
0 15 10 ? * 6L Dispara a las 10:15 am el último viernes de cada mes
0 15 10 ? * 6L 2002-2005 Dispara a las 10:15 am todos los últimos viernes de cada mes durante los años 2002, 2003, 2004 y 2005
0 15 10 ? * 6#3 Dispara a las 10:15 am el tercer viernes de cada mes
0 0 12 1/5 * ? Dispara a las 12pm(mediodía) cada 5 días cada mes, comenzando el primer día del mes.
0 11 11 11 11 ? Dispara cada 11 de noviembre a las 11:11am.