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 creando un archivo cron.yaml sigue siendo compatible con los trabajos existentes).

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

Formato de trabajo cron

Puedes usar la consola Google Cloud , 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 indican cuándo se debe ejecutar el trabajo.

Los campos de horario tienen el siguiente formato y los 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 Del 1 al 12 (o de ENE a DIC)
Día de la semana 0-6 (o de DOM a SÁB; o 7 para el domingo)
  • Minuto: Indica cuántos minutos después de la hora en punto se ejecuta tu trabajo. Por ejemplo, si el minuto se establece en 0, el trabajo se ejecuta al comienzo de la hora (porque son 0 minutos después de la hora). Por lo tanto, si la hora es las 8:00 a.m., el trabajo se ejecutará a las 8:00 a.m.

  • Hora: Indica cuántas horas después de la medianoche se ejecuta tu trabajo (se redondea a la hora más cercana, ya que los 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 en la hora de 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. 0o 7 pueden indicar el domingo. Especifica el día de la semana con un número o con las tres primeras letras del nombre del día de la semana en mayúsculas (por ejemplo, SUN para domingo).

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

Coincide con todos los valores

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

Estos son dos ejemplos en los que el campo de minutos no está restringido:

  • * 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, ya que cada uno de estos campos tampoco tiene restricciones).

El asterisco equivale 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 intervalo de valores, especifica los valores de inicio y finalización separados por un guion (-). No incluyas espacios en el intervalo. 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

Cómo hacer coincidir 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 (al comienzo de la hora y a la media hora).

Cómo omitir valores en un rango

Puedes omitir valores en un rango si especificas una tasa para recorrer el rango. A veces, esto se conoce como usar una función escalonada (o una expresión de tasa o un valor de paso). Para ello, especifica el rango, seguido de la barra diagonal (/) y la velocidad a la que deseas avanzar por 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 0 para los campos de minuto, hora y día de la semana (domingo), y 1 para los campos de día del mes y mes.

El valor del 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 escalonadas:

  • */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 y 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 con funciones escalonadas:

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

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

Programas de muestra

En la siguiente tabla, se muestran algunos ejemplos de programas de trabajo cron y sus descripciones:

Programar Formato de trabajo cron Explicación
Cada minuto * * * * * Se ejecuta cada minuto. Por ejemplo, 9:00 a.m., 9:01 a.m., 9:02 a.m., etcétera.
Cada 1 hora 0 * * * * Se ejecuta cada hora. 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 a.m. (00:00 en formato de 24 horas) todos los días.
Todos los días de la semana
(de lunes a viernes)
Los siguientes son equivalentes:
  • 0 0 * * 1-5
  • 0 0 * * MON-FRI
Se ejecuta a las 12 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 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 y 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 consola deGoogle Cloud (en la página Crea un trabajo, selecciona una zona horaria de la lista) o a través de la marca --time-zone de gcloud cuando crees 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 se ejecuten 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 tiempo más legible para las personas conocido como groc, que proporciona una alternativa a las expresiones de cron.

Ten en cuenta que, cuando especifiques una programación de trabajos 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". En esos casos, puedes usar construcciones como las de los siguientes ejemplos:

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

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

¿Qué sigue?