El servicio Cron de App Engine te permite configurar tareas programadas para que se ejecuten a horas concretas o en intervalos regulares. Estas tareas se conocen comúnmente como tareas cron. El servicio Cron de App Engine activa automáticamente estas tareas cron. 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.
Una tarea cron envía una solicitud HTTP GET
programada al endpoint especificado en la misma aplicación en la que se configura la tarea cron. El controlador de ese endpoint ejecuta la lógica cuando se llama.
El servicio Cron de App Engine no se puede usar para llamar a endpoints web fuera de la aplicación host de App Engine. Tampoco se puede usar para llamar a endpoints de App Engine desde otras aplicaciones que no sean la aplicación host.
Las solicitudes de tareas cron están sujetas a los mismos límites que las de las colas de tareas push.
Antes de empezar
Para implementar o actualizar programaciones, tu cuenta debe tener uno de los siguientes roles de gestión de identidades y accesos:
- Propietario
- Editor
Puedes definir el permiso en la página Gestión de identidades y accesos de la Google Cloud consola.
Crear una tarea cron
- Crea el archivo
cron.yaml
en el directorio raíz de tu aplicación (junto aapp.yaml
). Añada una o varias entradas
<cron>
al archivo y defina los elementos necesarios para su trabajo, incluidos los elementos obligatorios<url>
y<schedule>
. Consulta la sintaxis y las opciones de cron.yaml para obtener más información 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 una versión. Si está presente, el destino se añade al principio del nombre de host de tu aplicación, lo que provoca que el trabajo se dirija a ese servicio o versión. Si no se especifica ningún destino, el trabajo se ejecutará en las versiones del
default
servicio que estén configuradas para el tráfico.Crea un controlador para la URL de la tarea 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 (ambos incluidos) para indicar que la solicitud se ha realizado correctamente. Se pueden devolver otros códigos de estado, que se pueden usar para volver a intentar la tarea cron.
Probar tareas cron en el servidor de desarrollo
El servidor de desarrollo local no ejecuta automáticamente tus tareas cron. Puedes enviar solicitudes directamente a la URL de tu tarea cron para probar su funcionalidad. Puedes usar tu interfaz local de cron o de tareas programadas para activar las URLs de tus trabajos con curl o una herramienta similar.
Puedes usar la interfaz de administrador del servidor de desarrollo local para ver tus tareas cron en http://localhost:8000/cron
.
Reintentar tareas cron que fallan
Si el controlador de solicitudes de un trabajo cron devuelve un código de estado que no está en el intervalo 200-299 (inclusive), App Engine considera que el trabajo ha fallado. De forma predeterminada, los trabajos fallidos no se vuelven a intentar a menos que se devuelva un código de estado 503, en cuyo caso se vuelve a intentar cada minuto hasta que se complete correctamente o devuelva un código de estado entre 200 y 299.
Para configurar que se vuelvan a intentar las tareas fallidas, sigue estos pasos:
- Incluye un bloque
retry_parameters
en tu archivocron.yaml
. Elige y define los parámetros de reintento en el bloque
retry_parameters
.Por ejemplo, este archivo
cron.yaml
de muestra contiene una sola tarea cron configurada para reintentarse hasta cinco veces (el valor predeterminado) con un tiempo de espera 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
Más información sobre las opciones de reintento de cron
Desplegar tareas cron
Para implementar los trabajos cron especificados en el archivo de configuración cron.yaml
, ejecuta el siguiente comando:
gcloud app deploy cron.yaml
Eliminar todas las tareas cron
Para eliminar todos los cron jobs, sigue estos pasos:
Edita el contenido del archivo
cron.yaml
para que sea el siguiente:cron:
Despliega el archivo
cron.yaml
en App Engine.
Proteger URLs para cron
Un controlador cron es un controlador normal definido en app.yaml
. Puedes impedir que los usuarios accedan a las URLs que usan las tareas programadas restringiendo el acceso a las cuentas de administrador. Las tareas programadas pueden acceder a URLs solo para administradores. Puedes restringir una URL añadiendo login: admin
a la configuración del controlador en app.yaml
.
Por ejemplo, en app.yaml
, podría tener este aspecto:
runtime: python27
api_version: 1
handlers:
- url: /report/weekly
script: reports.app
login: admin
Para probar un trabajo cron, inicia sesión como administrador y visita la URL del controlador en tu navegador.
Las solicitudes procedentes del servicio cron contienen también una cabecera HTTP:
X-Appengine-Cron: true
App Engine define el encabezado X-Appengine-Cron
internamente. Si el controlador de solicitudes encuentra este encabezado, puede confiar en que la solicitud es una solicitud cron. Si el encabezado está presente en una solicitud de un usuario externo a tu aplicación, se elimina, excepto en el caso de las solicitudes de administradores que hayan iniciado sesión en la aplicación, que pueden definir el encabezado con fines de prueba.
App Engine envía solicitudes Cron desde la dirección IP 0.1.0.2
. En el caso de las tareas cron creadas con versiones anteriores de gcloud (anteriores a la 326.0.0), las solicitudes cron procederán de 0.1.0.1
.
Llamar a Google Cloud Endpoints
No puedes especificar un endpoint de Google Cloud en el campo url
de un trabajo cron.
Si quieres que tu trabajo cron llame a un endpoint de Google Cloud, envía una solicitud a un destino que sirva un controlador de tu aplicación y llama a la clase y al método del endpoint desde el código del controlador.
Ver tareas cron en la Google Cloud consola
Puedes ver las tareas cron programadas en la pestaña Tareas cron de App Engine de Cloud Scheduler.
También puedes ver los registros para saber cuándo se añadieron o quitaron los trabajos cron.
Más información
Consulta información detallada sobre cómo definir tareas cron en la referencia de cron.yaml.