Formato y zona horaria del trabajo cron

Los trabajos cron se programan en intervalos recurrentes especificados con un formato basado en unix-cron. Puedes definir un programa para que tu trabajo se ejecute varias veces al día o en días y meses específicos. (Aunque ya no recomendamos su uso, la programación de un trabajo mediante la creación de un cron.yaml archivo aún es compatible con los trabajos existentes).

Cloud Scheduler también admite la programación de trabajos con un formato más legible para las personas. Para obtener más información, en este documento, consulta Formato de trabajo alternativo.

Formato de trabajo cron

Puedes usar la Google Cloud consola, Google Cloud CLI o la API de REST de Cloud Scheduler para establecer tu programa.

Un programa se define con el formato de cadena unix-cron (* * * * *), que es un conjunto de cinco campos en una línea, que indica cuándo se debe ejecutar el trabajo.

Los campos de hora tienen el siguiente formato y valores posibles, y deben seguir este orden:

|------------------------------- Minute (0-59)
|     |------------------------- Hour (0-23)
|     |     |------------------- Day of the month (1-31)
|     |     |     |------------- Month (1-12; or JAN to DEC)
|     |     |     |     |------- Day of the week (0-6; or SUN to SAT; or 7 for Sunday)
|     |     |     |     |
|     |     |     |     |
*     *     *     *     *
Campo Formato de valores válidos
Minuta 0-59
Hora 0-23
día del mes 1-31
Mes 1-12 (o JAN a DEC)
Día de la semana 0-6 (o SUN a SAT; o 7 para el domingo)
  • Minuta: Indica cuántos minutos después de la hora en punto se ejecuta tu trabajo. Por ejemplo, si la minuta se establece en 0, el trabajo se ejecuta en la hora en punto (porque son 0 minutos después de la hora). Por lo tanto, si la hora es las 8:00 a.m., el trabajo se ejecuta a las 8:00 a.m.

  • Hora: Indica cuántas horas después de la medianoche se ejecuta tu trabajo (redondeado a la hora más cercana, porque las minutos restantes se indican en el campo minute). La medianoche es 0 y el mediodía es 12. Por ejemplo, si la hora se establece en 0, el trabajo se ejecuta a la medianoche (porque son 0 horas después de la medianoche).

  • Día del mes: Indica la fecha del calendario del mes. Por ejemplo, 1 para el primer día del mes. Cloud Scheduler no admite L para indicar el último día del mes.

  • Mes: Indica el mes. Especifica el número del mes o las tres primeras letras del nombre del mes en mayúsculas. Por ejemplo, 1 para enero o, de manera equivalente, JAN.

  • Día de la semana: Indica el día de la semana. Por ejemplo, el lunes es 1 y el martes es 2. 0 o 7 pueden indicar el domingo. Especifica el día de la semana por número o por las tres primeras letras del nombre del día de la semana en mayúsculas (por ejemplo, SUN para el domingo).

    • Este campo se evalúa como un OR inclusivo con el day of the month campo, a menos que uno de estos campos esté marcado como sin restricciones por el asterisco (*). Por ejemplo, si el día del mes se establece en 1 y el día de la semana se establece en SAT, el trabajo se ejecuta el primer día del mes y todos los sábados de el mes, incluso si el primer día del mes no es sábado. Si el día de la semana no tiene restricciones (establecido en *), el trabajo se ejecuta solo el primer día del mes.

Coincidencia con todos los valores

Para que coincida con todos los valores de un campo, usa el asterisco: *. Cuando un campo se establece en el asterisco, el campo coincide con todos los valores válidos para ese campo cuando se cumplen las demás condiciones del campo. A veces, establecer un campo en el asterisco se denomina dejar el campo sin restricciones, ya que no está restringido a un valor específico.

Aquí hay dos ejemplos en los que el campo de minutos no tiene restricciones:

  • * 0 1 1 1: El trabajo se ejecuta cada minuto de la hora de la medianoche el 1 de enero y los lunes.
  • * * * * *: El trabajo se ejecuta cada minuto (de cada hora, de cada día del mes, de cada mes, todos los días de la semana, porque cada uno de estos campos tampoco tiene restricciones).

El asterisco es equivalente a un caso especial de un rango, en el que el rango comienza en el primer valor válido para el campo y termina en el último valor válido para el campo (por ejemplo, 0-59 para el campo de minutos).

Coincidencia con un rango

Para que coincida con un rango de valores, especifica los valores de inicio y detención, separados por un guion (-). No incluyas espacios en el rango. Los rangos son inclusivos. El primer número debe ser menor que el segundo. Si usas nombres abreviados para el mes o el día de la semana (por ejemplo, JAN en lugar de 1 para el primer mes del año), el primer valor debe aparecer antes en el mes o la semana que el segundo valor.

Los siguientes ejemplos equivalentes se ejecutan a la medianoche los lunes, martes, miércoles, jueves y viernes (para todos los meses):

  • 0 0 * * 1-5
  • 0 0 * * MON-FRI

Coincidencia con una lista

Las listas pueden contener cualquier valor válido para el campo, incluidos los rangos. Especifica tus valores, separados por una coma (,). No incluyas espacios en la lista.

Ejemplos:

  • 0 0,12 * * *: El trabajo se ejecuta a la medianoche y al mediodía.
  • 0-5,30-35 * * * *: El trabajo se ejecuta en cada uno de los primeros cinco minutos de cada media hora (en la hora en punto y a la media hora).

Omisión de valores en un rango

Puedes omitir valores en un rango si especificas una tasa a la que se debe recorrer el rango. A veces, esto se denomina usar una función de paso (o valor o expresión de tasa de paso). Para ello, especifica el rango, seguido de la barra diagonal (/) y la tasa a la que deseas recorrer el rango.

Puedes usar el asterisco (*) para indicar el rango de todos los valores del campo. Cuando usas el asterisco, el primer valor del rango es el siguiente: 0 para los campos de minutos, hora y día de la semana (domingo), y 1 para los campos de día del mes y mes.

El valor de paso no puede ser mayor que el valor más alto posible para el campo. El paso predeterminado es 1, por lo que la función de paso /1 es la misma que no usar ninguna función de paso.

Ejemplos de rangos que usan funciones de paso:

  • */2: Esta es una función de paso válida para cualquier campo. Para el campo de minutos, coincide con 0, 2, 4, ... , 58. Para la hora, coincide con 0, 2, 4, ... , 22. Para el día del mes, coincide con 1, 3, 5, ... , 31 (para un mes con 31 días). Para el mes, coincide con 1, 3, 5, ... , 11. Para el día de la semana, coincide con 0, 2, 4, 6.

  • 0-12/2: Esta es una función de paso válida para los campos de minutos y horas. Coincide con 0, 2, 4, ... , 12.

Ejemplos de programas que usan funciones de paso:

  • */2 * * * *: El trabajo se ejecuta cada dos minutos.

  • 0 0-12/2 * * *: El trabajo se ejecuta cada dos horas, en la hora en punto. La primera ejecución es a la medianoche. La última ejecución es al mediodía.

Programas de muestra

En la siguiente tabla, se muestran algunos programas de trabajo cron de muestra y su descripción:

Programa Formato de trabajo cron Explicación
Cada minuto * * * * * Se ejecuta en la minuta. Por ejemplo, 9:00 a.m., 9:01 a.m., 9:02 a.m., etcétera.
Cada 1 hora 0 * * * * Se ejecuta en la hora en punto. Por ejemplo, 9:00 a.m., 10:00 a.m., 11:00 a.m., etcétera.
Todos los días 0 0 * * * Se ejecuta a las 12:00 a.m. (00:00 en formato de 24 horas) todos los días.
Todos los días de la semana
(lunes a viernes)
Los siguientes son equivalentes:
  • 0 0 * * 1-5
  • 0 0 * * MON-FRI
Se ejecuta a las 12:00 a.m. (00:00 en formato de 24 horas) los lunes, martes, miércoles, jueves y viernes.
Todas las semanas Los siguientes son equivalentes:
  • 0 0 * * 0
  • 0 0 * * 7
  • 0 0 * * SUN
Se ejecuta los domingos a las 12:00 a.m. (00:00 en formato de 24 horas).
Todos los meses 0 0 1 * * Se ejecuta a las 12:00 a.m. (00:00 en formato de 24 horas) el primer día del mes.
Todos los trimestres Los siguientes son equivalentes:
  • 0 0 1 1,4,7,10 *
  • 0 0 1 JAN,APR,JUL,OCT *
Se ejecuta a las 12:00 a.m. (00:00 en formato de 24 horas) el primer día del trimestre, para un programa trimestral estándar: 1 de enero, 1 de abril, 1 de julio 1 de octubre.
Todos los años Los siguientes son equivalentes:
  • 0 0 1 1 *
  • 0 0 1 JAN *
Se ejecuta a las 12:00 a.m. (00:00 en formato de 24 horas) el primer día del primer mes del año (1 de enero).

Zona horaria

Puedes seleccionar la zona horaria para evaluar el programa en la Google Cloud consola (en la página Crear un trabajo, selecciona una Zona horaria de la lista) o a través de la marca gcloud --time-zone cuando creas el trabajo.

El valor de este campo debe ser la abreviatura de la zona horaria que se usa en la base de datos tz. La zona horaria predeterminada es UTC.

Para algunas zonas horarias, el horario de verano puede hacer que los trabajos se ejecuten o no de forma inesperada. Esto se debe a que Cloud Scheduler se ejecuta según las horas reales. En las instancias en las que una hora puede transcurrir dos veces (como en el caso de los relojes que se retroceden) y tu trabajo está programado para esa hora, el trabajo programado puede experimentar anomalías de ejecución.

Si el trabajo requiere una cadencia muy específica, recomendamos que elijas una zona horaria que no use el horario de verano. En particular, se recomienda UTC para Cloud Scheduler a fin de evitar el problema por completo.

Formato de trabajo alternativo

Puedes usar un formato de especificación de hora más legible para las personas conocido como groc que proporciona una alternativa a las expresiones cron.

Ten en cuenta que, cuando especificas un programa de trabajo con groc, debes usar la CLI de gcloud o realizar una solicitud directa a la API de Cloud Scheduler.

Por ejemplo, algunos eventos recurrentes pueden ser difíciles de especificar con cron, como el “tercer martes de cada mes” o “quincenal” (cada 336 horas). En esos casos, puedes usar construcciones como los siguientes ejemplos:

03 of month 12:34
1,3,4,7,11,18,29 of jan,jul 12:34
1st friday of quarter 9:00
1st,third monday of month 04:00
2nd,3rd tue,wed,thu of feb,aug 13:50
every 336 hours
every 48 hours
every 5 minutes
every 60 minutes on mon,wed
every day 09:00
every minute
every sun,tue,thu 9:00
every wed of december 00:00
first sunday of month 12:00
second,4th tue,thursday of 3rd month of quarter 18:30

Para obtener más información sobre la sintaxis, consulta Cómo definir el programa de trabajo cron.

¿Qué sigue?