Los trabajos cron se programan en intervalos recurrentes especificados con un formato basado en unix-cron. Puedes definir una programación de modo 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 sintaxis cron de App Engine heredada aún es compatible con los trabajos existentes).
Formato del trabajo cron
Puedes usar la consola de Google Cloud, Google Cloud CLI o la API de REST de Cloud Scheduler para establecer tu programación.
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 horario 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 | De 1 a 12 (o de ENE a DIC) |
Día de la semana | De 0 a 6 (o de dom a sáb, o 7 para el domingo) |
Minuto: Indica cuánto tiempo después de la hora en punto se ejecuta la tarea, en minutos. Por ejemplo, si el minuto se establece en
0
, el trabajo se ejecuta a la hora en punto (porque son 0 minutos después de la hora). Por lo tanto, si la hora es a las 8:00 a.m., el trabajo se ejecutará a esa hora.Hour: Indica cuánto tiempo después de la medianoche se ejecuta la tarea, en horas (redondeadas hacia abajo a la hora más cercana, ya que los minutos restantes se indican en el campo
minute
). La medianoche es0
y el mediodía es12
. Por ejemplo, si la hora se establece en0
, 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 admiteL
para indicar el último día del mes.Mes: Indica el mes. Especifica el número de mes o las primeras tres 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 es2
. Se puede indicar el domingo con0
o7
. 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 campoday 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 se establece en1
y el día de la semana enSAT
, 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 un sábado. Si el día de la semana no tiene restricciones (se establece en*
), la tarea se ejecuta solo el primer día del mes.
- Este campo se evalúa como un
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, este coincide con todos los valores válidos para ese campo cada vez que se cumplen las otras condiciones del campo. A veces, configurar un campo con el asterisco se conoce como dejar el campo sin restricciones, ya que no se limita a un valor específico.
Estos son dos ejemplos en los que el campo de minutos no está restringido:
* 0 1 1 1
: La tarea se ejecuta todos los minutos de la medianoche del 1 de enero y los lunes.* * * * *
: La tarea se ejecuta cada minuto (de cada hora, de cada día del mes, de cada mes, de cada día de la semana, porque 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).
Cómo hacer coincidir un rango
Para que coincida con un rango de valores, especifica los valores de inicio y finalización, separados por un guión (-
). 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.
Los siguientes ejemplos equivalentes se ejecutan a la medianoche de 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 los valores separados por comas (,
). No incluyas espacios en la lista.
Ejemplos:
0 0,12 * * *
: El trabajo se ejecuta a medianoche y al mediodía.0-5,30-35 * * * *
: La tarea se ejecuta en cada uno de los primeros cinco minutos de cada media hora (a la hora en punto y a media hora).
Omitir valores en un rango
Para omitir valores en un rango, especifica una tasa a la que avanzar por 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 velocidad a la que deseas omitir 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 lo mismo que no usar una función de paso.
Ejemplos de intervalos 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 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.
Programas de ejemplo con funciones escalonadas:
*/2 * * * *
: La tarea se ejecuta cada dos minutos.0 0-12/2 * * *
: La tarea se ejecuta cada dos horas, a 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:
Programar | Formato del trabajo cron | Explicación |
---|---|---|
Cada minuto | * * * * * |
Se ejecuta en el minuto. Por ejemplo, 9:00 a.m., 9:01 a.m., 9:02 a.m., etcétera. |
Cada 1 hora | 0 * * * * |
Se ejecuta a 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:
|
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:
|
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:
|
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 y 1 de octubre. |
Todos los años | Los siguientes son equivalentes:
|
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 de Google Cloud (en la página Crea un trabajo, selecciona una Zona horaria de la lista) o a través de la marca gcloud
--time-zone
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 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, te 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.