Python 2 wird von der Community nicht mehr unterstützt. Wir empfehlen die Migration von Python 2-Anwendungen zu Python 3.

Aufgaben mit Cron für Python 2 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. Cronjobs werden vom App Engine-Cron-Dienst automatisch ausgelöst. 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 gemäß seinem Zeitplan eine HTTP-GET-Anfrage an eine URL. Beim Aufruf führt der Handler für diese URL die Logik aus. 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.

    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.

Weitere Informationen zu Syntax und Optionen von cron.yaml.

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.

Sie können die Administratoroberfläche des lokalen Entwicklungsservers verwenden, um Ihre Cronjobs unter http://localhost:8000/cron einzusehen.

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

appcfg

Führen Sie Folgendes aus, wenn Sie das ursprüngliche App Engine SDK verwenden:

appcfg.py update_cron [YOUR_APP_DIR]

Alle Cronjobs löschen

So löschen Sie alle Cronjobs:

  1. Geben Sie in der Datei cron.yaml Folgendes an:

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

URLs für Cron schützen

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:

runtime: python27
api_version: 1

handlers:
- url: /report/weekly
  script: reports.app
  login: admin
Weitere Informationen dazu, wie Sie den Anmelde- oder Administratorstatus erforderlich machen, finden Sie in der Referenz zu app.yaml.

Melden Sie sich zum Testen eines Cronjobs als Administrator an und rufen Sie im 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.

Google App Engine gibt Cron-Anfragen über die IP-Adresse 0.1.0.1 aus.

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 Cloud Console ansehen

Sie können geplante Cronjobs in der Cloud Console auf der Seite „Cronjobs“ prüfen.

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.