El servicio Cron de App Engine te permite configurar tareas generalmente programadas que operan a horas definidas o intervalos regulares. Estas tareas se conocen comúnmente como trabajos cron. Los trabajos cron se activan de manera automática con el servicio cron de App Engine. Por ejemplo, puedes usar un trabajo cron para enviar un informe por correo electrónico a diario, actualizar algunos datos almacenados en caché cada 10 minutos o actualizar la información de resumen una vez por hora.
Un trabajo cron realiza una solicitud GET
HTTP programada al extremo especificado en la misma aplicación en la que se configuró el trabajo cron. El controlador para esa URL ejecuta la lógica cuando se lo llama.
El servicio Cron de App Engine no se puede usar para llamar a los extremos web fuera de la app host de App Engine. No se puede usar para llamar a los extremos de App Engine desde otras apps además de la app host.
Una solicitud de trabajo cron está sujeta a los mismos límites que la lista de tareas en cola.
Antes de comenzar
Para implementar o actualizar los programas, tu cuenta requiere una de las funciones de IAM siguientes:
- Propietario
- Editor
Puedes configurar el permiso en la página de IAM en la consola de Google Cloud.
Crea un trabajo cron
- Crea el archivo
cron.yaml
en el directorio raíz de la aplicación (junto conapp.yaml
). Agrega una o más entradas
<cron>
al archivo y define los elementos necesarios para el trabajo, incluidos los elementos<url>
y<schedule>
obligatorios. Revisa la sintaxis y las opciones de cron.yaml para obtener más detalles sobre los elementos del archivocron.yaml
.En el siguiente ejemplo, se crea un trabajo cron básico que se ejecuta a diario:
cron: - description: "daily summary job" url: /tasks/summary target: beta schedule: every 24 hours
La especificación de destino es opcional y es el nombre de un servicio o versión. Si está presente, el destino se antepone al nombre de host de la aplicación, lo que hace que el trabajo se enrute a ese servicio o versión. Si no se especifica un destino, el trabajo se ejecutará en las versiones del servicio
default
que se configuraron para el tráfico.Crea un controlador para la URL del trabajo cron. El controlador debe ejecutar las tareas que quieras programar. El controlador debe responder con un código de estado HTTP entre 200 y 299 (inclusive) para indicar el éxito. Se pueden mostrar otros códigos de estado y usarse para reintentar el trabajo cron.
web.xml
debe ser igual que la URL del trabajo cron.
Prueba los trabajos cron en el servidor de desarrollo
El servidor de desarrollo local no ejecuta tus trabajos cron de manera automática. Puedes realizar solicitudes directamente a la URL de tu trabajo cron para probar la funcionalidad. Puedes usar tu cron local o la interfaz de tareas programadas para activar las URL de tus trabajos con curl o una herramienta similar.
Cómo reintentar los trabajos cron que contienen errores
Si el controlador de solicitudes de un trabajo cron muestra un código de estado que no está entre 200 y 299 (inclusive), App Engine considera que el trabajo falló. De forma predeterminada, los trabajos fallidos no se reintentan, a menos que se muestre un código de estado 503, en cuyo caso se reintenta cada minuto hasta que tenga éxito o se muestre un código de estado entre 200 y 299.
Para configurar que los trabajos fallidos se reintenten, haz lo siguiente:
- Incluye un bloque
retry_parameters
en el archivocron.yaml
. Elige y establece los parámetros de reintento en el bloque
retry_parameters
.Por ejemplo, este archivo
cron.yaml
de muestra contiene un solo trabajo cron que está configurado para reintentarse hasta cinco veces (el valor predeterminado) con una retirada inicial de 2.5 segundos que se duplica cada vez.cron: - description: "retry demo" url: /retry schedule: every 10 mins retry_parameters: min_backoff_seconds: 2.5 max_doublings: 5
Obtén más información sobre las opciones de reintento de cron.
Implementa trabajos cron
Para implementar los trabajos cron que se especificaron en el archivo de configuración cron.yaml
, ejecuta el siguiente comando:
gcloud
gcloud app deploy cron.yaml
Maven
mvn appengine:deployCron cron.yaml
Gradle
gradle appengineDeployCron cron.yaml
IDE
Si usas IntelliJ o Eclipse, selecciona los archivos de configuración individuales que se implementarán mediante el formulario de implementación.
Cómo borrar todos los trabajos cron
Sigue estos pasos para borrar todos los trabajos cron:
Edita el contenido del archivo
cron.yaml
de la siguiente manera:cron:
Implementa el archivo
cron.yaml
en App Engine.
Protege las URL para cron
Un controlador cron es solo un controlador normal definido en app.yaml
. Puedes evitar que los usuarios accedan a las URL que usan las tareas programadas si restringes el acceso a las cuentas de administrador. Las tareas programadas pueden acceder a las URL exclusivas para administradores. Si deseas restringir una URL, puedes agregar login: admin
a la configuración del controlador en app.yaml
.
Un ejemplo podría verse así en app.yaml
:
application: hello-cron
version: 1
runtime: java
api_version: 1
handlers:
- url: /report/weekly
servlet: mysite.server.CronServlet
login: admin
Para probar un trabajo cron, accede como administrador y visita la URL del controlador en tu navegador.
Las solicitudes del servicio cron también contendrán un encabezado HTTP:
X-Appengine-Cron: true
App Engine configura el encabezado X-Appengine-Cron
de forma interna. Si el controlador de solicitudes encuentra este encabezado, puedes confiar en que la solicitud es cron. Si el encabezado está presente en una solicitud de usuario externa a la app, este se quita, excepto en el caso de las solicitudes de los administradores que hayan accedido a la aplicación, ya que estos tienen permitido configurar el encabezado con fines de prueba.
App Engine genera solicitudes cron desde la dirección IP 0.1.0.2
. En el caso de los trabajos cron creados con versiones anteriores de gcloud (antes de 326.0.0), las solicitudes provienen de 0.1.0.1
.
Llama a Google Cloud Endpoints
No puedes especificar un Google Cloud Endpoint en el campo url
de un trabajo cron.
Si deseas que el trabajo cron llame a un Google Cloud Endpoint, emite una solicitud a un objetivo entregado por un controlador en tu app y llama a la clase y al método del extremo desde el código del controlador.
Visualiza trabajos cron en la consola de Google Cloud
Puedes ver los trabajos cron programados en la pestaña Trabajos cron de App Engine de Cloud Scheduler.
También puedes ver los registros para visualizar cuándo se agregaron o quitaron los trabajos cron.
Más información
Para obtener más información sobre la definición de trabajos cron, consulta la Referencia de cron.yaml.