Aufgaben mit Cron für Java 8 (gcloud-CLI-basierend) planen

Mit dem Cron-Dienst von App Engine können Sie regelmäßig geplante Aufgaben konfigurieren, die zu bestimmten Zeiten oder in regelmäßigen Abständen ausgeführt werden. Diese Aufgaben werden allgemein als Cronjobs bezeichnet. Der Cron-Dienst von App Engine löst diese Cronjobs automatisch aus. Sie können einen Cronjob beispielsweise nutzen, um täglich einen E-Mail-Bericht zu senden, alle 10 Minuten Daten im Cache oder einmal pro Stunde bestimmte zusammenfassende Informationen zu aktualisieren.

Ein Cronjob stellt eine geplante HTTP-GET-Anfrage an den angegebenen Endpunkt in derselben Anwendung, in der der Cronjob konfiguriert ist. Beim Aufruf führt der Handler für diesen Endpunkt die Logik aus.

Der App Engine Cron-Dienst kann nicht zum Aufrufen von Webendpunkten außerhalb der App Engine-Hostanwendung verwendet werden. App Engine-Endpunkte können nicht von anderen Anwendungen außer der Hostanwendung aufgerufen werden.

Für eine Cronjob-Anfrage gelten die gleichen Einschränkungen wie für Push-Aufgabenwarteschlangen.

Hinweis

Zum Bereitstellen oder Aktualisieren von Zeitplänen benötigt Ihr Konto eine der folgenden IAM-Rollen:

  • Inhaber
  • Editor

Sie können die Berechtigung in der Google Cloud Console auf der Seite „IAM“ festlegen.

Cronjob erstellen

  1. Erstellen Sie die Datei cron.yaml im Stammverzeichnis Ihrer Anwendung (zusätzlich zur Datei app.yaml).
  2. Fügen Sie einen oder mehrere <cron>-Einträge in die Datei ein und definieren Sie die erforderlichen Elemente für den Job, einschließlich der erforderlichen <url>- und <schedule>-Elemente. Weitere Informationen zu den Elementen der Datei cron.yaml finden Sie unter Cron.yaml-Syntax und -Optionen prüfen.

    Im folgenden Beispiel wird ein einfacher Cronjob zur täglichen Ausführung erstellt:

    cron:
    - description: "daily summary job"
      url: /tasks/summary
      target: beta
      schedule: every 24 hours
    

    Die Angabe des Ziels (Name eines Diensts oder einer Version) ist optional. Falls vorhanden, wird das Ziel dem Hostnamen der Anwendung vorangestellt, wodurch der Job an diesen Dienst oder diese Version weitergeleitet wird. Wenn kein Ziel angegeben ist, wird der Job in den Versionen des default-Dienstes ausgeführt, die für den Traffic konfiguriert sind.

  3. Erstellen Sie einen Handler für die Cronjob-URL. Der Handler sollte alle Aufgaben ausführen, die Sie planen möchten. Bei erfolgreicher Ausführung sollte der Handler als Antwort einen HTTP-Statuscode zwischen 200 und 299 (einschließlich) zurückgeben. Es können auch andere Statuscodes zurückgegeben und für die nochmalige Ausführung des Cronjobs verwendet werden.

Der Handler kann so einfach gestaltet sein wie ein Servlet in der Anwendung. Die Servlet-URL-Zuordnung in web.xml sollte mit der Cronjob-URL übereinstimmen.

Cronjobs im Entwicklungsserver testen

Cronjobs werden auf dem lokalen Entwicklungsserver nicht automatisch ausgeführt. Sie können Anfragen direkt an die URL eines Cronjobs senden, um die Funktionalität zu testen. Über Ihre lokale Oberfläche für Cronjobs oder geplante Aufgaben können Sie die URLs Ihrer Jobs mit curl oder einem ähnlichen Tool auslösen.

Fehlgeschlagene Cronjobs wiederholen

Wenn der Anfrage-Handler eines Cronjobs einen Statuscode zurückgibt, der nicht im Bereich von 200 bis 299 (einschließlich) liegt, betrachtet App Engine den Job als fehlgeschlagen. Fehlgeschlagene Jobs werden standardmäßig nur dann wiederholt, wenn der Statuscode 503 zurückgegeben wird. In diesem Fall wird der jeweilige Job jede Minute wiederholt, bis er erfolgreich ist oder einen der Statuscodes von 200 bis 299 zurückgibt.

So legen Sie fest, dass fehlgeschlagene Jobs wiederholt werden:

  1. Nehmen Sie in Ihre cron.yaml-Datei den Block retry_parameters auf.
  2. Geben Sie im retry_parameters-Block die Wiederholungsparameter an und legen Sie dafür Werte fest.

    Die Datei cron.yaml in diesem Beispiel enthält einen einzelnen Cronjob, der so konfiguriert ist, dass er bis zu fünfmal (Standard) wiederholt wird, wobei ein Start-Backoff von 2,5 Sekunden vorgesehen ist, der sich jedes Mal verdoppelt.

    cron:
    - description: "retry demo"
      url: /retry
      schedule: every 10 mins
      retry_parameters:
        min_backoff_seconds: 2.5
        max_doublings: 5
    

Weitere Informationen zu den Wiederholungsoptionen für Cronjobs

Cronjobs bereitstellen

Um die in der Konfigurationsdatei cron.yaml angegebenen Cronjobs bereitzustellen, führen Sie folgenden Befehl aus:

gcloud

gcloud app deploy cron.yaml

Maven

mvn appengine:deployCron cron.yaml

Gradle

gradle appengineDeployCron cron.yaml

IDE

Wenn Sie IntelliJ oder Eclipse verwenden, wählen Sie mithilfe des Bereitstellungsformulars die einzelnen Konfigurationsdateien aus, die verwendet werden sollen.

Alle Cronjobs löschen

So löschen Sie alle Cronjobs:

  1. Bearbeiten Sie den Inhalt der Datei cron.yaml so:

    cron:
    
  2. Stellen Sie die Datei cron.yaml in App Engine bereit.

URLs für Cron sichern

Ein Cron-Handler ist ein gewöhnlicher Handler, der in app.yaml definiert ist. Wenn Nutzer nicht auf URLs zugreifen sollen, die von geplanten Aufgaben verwendet werden, beschränken Sie den Zugriff auf Administratorkonten. Geplante Aufgaben können auf nur für Administratoren bestimmte URLs zugreifen. Sie haben die Möglichkeit, eine URL einzuschränken und dafür login: admin zur Handler-Konfiguration in app.yaml hinzuzufügen.

Ein Beispiel in der Datei app.yaml kann in etwa so aussehen:

application: hello-cron
version: 1
runtime: java
api_version: 1

handlers:
- url: /report/weekly
  servlet: mysite.server.CronServlet
  login: admin

Melden Sie sich zum Testen eines Cronjobs als Administrator an und rufen Sie in Ihrem Browser die URL des Handlers auf.

Anfragen vom Cron-Dienst enthalten auch einen HTTP-Header:

X-Appengine-Cron: true

Der Header X-Appengine-Cron wird intern von Google App Engine festgelegt. Wenn Ihr Anfrage-Handler diesen Header findet, kann er sich darauf verlassen, dass es sich bei der Anfrage um eine Cron-Anfrage handelt. Wenn der Header in einer externen Nutzeranfrage an Ihre Anwendung vorhanden ist, wird er entfernt. Eine Ausnahme sind Anfragen von angemeldeten Administratoren der Anwendung, die den Header für Testzwecke festlegen dürfen.

App Engine gibt Cron-Anfragen über die IP-Adresse 0.1.0.2 aus. Bei Cronjobs, die mit älteren gcloud-Versionen (vor Version 326.0.0) erstellt wurden, stammen Cron-Anfragen von 0.1.0.1.

Google Cloud Endpoints aufrufen

Sie können im Feld url eines Cronjobs keinen Google Cloud Endpoint angeben. Wenn mit dem Cronjob ein Google Cloud Endpoint aufgerufen werden soll, senden Sie eine Anfrage an ein Ziel, das von einem Handler in Ihrer Anwendung bereitgestellt wird, und rufen Sie die Endpoint-Klasse und -Methode über den Handler-Code auf.

Cronjobs in der Google Cloud Console ansehen

Sie können geplante Cronjobs auf dem Tab App Engine-Cronjobs von Cloud Scheduler aufrufen.

Sie können auch Logs aufrufen, um zu sehen, wann Cronjobs hinzugefügt oder entfernt wurden.

Weitere Informationen

Ausführliche Informationen zum Definieren von Cronjobs finden Sie in der Referenz zu cron.yaml.