Mis favoritos | Español | Acceder

Tareas programadas con Cron para Java

El servicio Cron de App Engine te permite configurar con regularidad tareas programadas que operan en momentos definidos o 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 utilizarlo para enviar un correo electrónico de informe a diario, para actualizar los datos almacenados en la caché cada 10 minutos o para actualizar la información de resumen cada hora.

Una tarea cron ejecutará una URL en un momento concreto del día. Una URL ejecutada por el servicio Cron está sujeta a los mismos límites y cuotas que una solicitud HTTP normal, incluido el límite de tiempo de la solicitud.

Una aplicación puede contener hasta 20 tareas programadas.

Acerca de cron.xml

Un archivo cron.xml del directorio WEB-INF de tu aplicación (junto con appengine-web.xml) controla el servicio Cron para tu aplicación Java. A continuación, se ofrece un ejemplo del archivo cron.xml:

<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
  <cron>
    <url>/recache</url>
    <description>Repopulate the cache every 2 minutes</description>
    <schedule>every 2 minutes</schedule>
  </cron>
  <cron>
    <url>/weeklyreport</url>
    <description>Mail out a weekly report</description>
    <schedule>every monday of month 08:30</schedule>
    <timezone>America/New_York</timezone>
  </cron>
</cronentries>

En el caso de un XSD que describa el formato, consulta el archivo docs/cron.xsd del kit de desarrollo de software (SDK).

Un archivo cron.xml consta de un número de definiciones de tarea. Una definición de tarea debe contener <url> y <schedule>. Opcionalmente, puedes especificar también <description> y <timezone>. La descripción se podrá ver en la consola de administración.

El campo URL url es una URL de tu aplicación. El formato del campo schedule se trata más detenidamente en la sección Formato de la programación.

La zona horaria debe tener el nombre de una zona horaria zoneinfo estándar. Si no especificas una zona horaria, las tareas se ejecutarán en hora UTC (también conocida como hora GMT).

Formato de la programación

Las programaciones cron se especifican mediante un formato tipo inglés sencillo.

A continuación, se muestran ejemplos de programaciones:

every 5 minutes
every 12 hours
2nd,third mon,wed,thu of march 17:00
every monday of month 09:00
1st monday of sep,oct,nov 17:00

Si no necesitas ejecutar una tarea repetida en un momento específico pero, necesitas ejecutarla en intervalos regulares, utiliza el siguiente formato: every N (hours|mins|minutes), donde N es un número y horas o minutos especifica la unidad de tiempo. El tiempo más breve que se puede especificar en la ejecución de una tarea es 1 minuto.

Si deseas establecer tiempos más específicos, puedes especificar la programación del siguiente modo:

("every"|ordinal) (days) "of" (monthspec) (time)

Los paréntesis se emplean sólo a modo de ejemplo y las comillas indican un valor literal.

Donde:

  • ordinal indica una lista separada por comas de "1st", "first" y así sucesivamente (ambas formas son correctas).
  • days indica una lista de días de la semana separados por comas (por ejemplo, "mon", "tuesday"; se aceptan tanto la forma corta como la forma larga).
  • monthspec indica una lista de meses separados por comas (por ejemplo, "jan", "march", "sep").
  • time indica la hora del día, en formato HH:MM y horario de 24 horas.

Protección de direcciones URL para Cron

Puedes evitar que los usuarios accedan a URL utilizadas por tareas programadas a través de la restricción del acceso a las cuentas del administrador. Las tareas programadas pueden acceder a URL exclusivas de administradores. Puedes consultar información sobre cómo restringir una URL en la sección Seguridad y autenticación. A continuación, se muestra un ejemplo que puedes utilizar en web.xml para restringir todo lo que empiece por /cron/ al uso exclusivo de administradores:

    <security-constraint>
        <web-resource-collection>
            <url-pattern>/cron/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>

Para obtener más información sobre el formato de web.xml, consulta la documentación del descriptor de implementación.

Para probar una tarea cron, accede como administrador y visita la URL del controlador en tu navegador.

La solicitudes procedentes del servicio Cron también contienen un encabezado HTTP:

X-AppEngine-Cron: true

Si deseas garantizar que sólo las solicitudes cron puedan activar tu controlador, debes comprobar este encabezado.

Subida de tareas cron

Puedes utilizar AppCfg para subir tareas cron. Cuando subas tu aplicación a App Engine a través de AppCfg update, el servicio Cron se actualizará con el contenido de cron.xml. Puedes actualizar sólo la configuración cron sin subir el resto de la aplicación a través de AppCfg update_cron.

Para eliminar todas las tareas cron, modifica el archivo cron.xml para que contenga sólo lo siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<cronentries/>

Compatibilidad del servicio Cron con la consola de administración

La consola de administración te permite ver el estado de tus tareas cron. Selecciona el enlace "Cron Jobs" del menú lateral para ver el estado de las tareas, incluida la última vez que se ejecutó la tarea, así como su resultado.

Para ver las tareas que se han añadido o eliminado, selecciona la página "Admin Logs" en el menú de la consola de administración.

Compatibilidad del servicio Cron con el servidor de desarrollo

El servidor web de desarrollo (dev appserver) no ejecuta automáticamente tus tareas cron. Puedes utilizar tu interfaz de tareas programadas o el servicio Cron de tu escritorio local para acceder a las URL de tus tareas a través de curl o una herramienta similar.