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
- Erstellen Sie die Datei
cron.xml
im VerzeichnisWEB-INF/
Ihrer Anwendung (zusätzlich zur Dateiappengine-web.xml
). 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:
<?xml version="1.0" encoding="UTF-8"?> <cronentries> <cron> <url>/tasks/summary</url> <target>beta</target> <description>daily summary job</description> <schedule>every 24 hours</schedule> </cron> </cronentries>
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.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.
web.xml
sollte mit der Cronjob-URL übereinstimmen.
Weitere Informationen finden Sie auf der Seite 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.
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:
- Nehmen Sie in Ihre
cron.xml
-Datei den Blockretry-parameters
auf. Geben Sie im
retry-parameters
-Block die Wiederholungsparameter an und legen Sie dafür Werte fest.Die Datei
cron.xml
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.<cronentries> <cron> <url>/retry</url> <description>Retry on jsdk</description> <schedule>every 10 minutes</schedule> <retry-parameters> <min-backoff-seconds>2.5</min-backoff-seconds> <max-doublings>5</max-doublings> </retry-parameters> </cron> </cronentries>
Weitere Informationen zu den Wiederholungsoptionen für Cronjobs
Cronjobs bereitstellen
- Option 1: Gesamte Anwendung hochladen
Führen Sie den folgenden Befehl aus, um Ihre gesamte Anwendung hochzuladen, wobei auch der Cron-Dienst mit den Einträgen aus der Datei
cron.xml
aktualisiert wird:./appengine-java-sdk/bin/appcfg.sh -A your-app-id -V app-version update [YOUR_APP_DIR]
- Option 2: Nur Cron-Aktualisierungen hochladen
Führen Sie den folgenden Befehl aus, um nur die Cron-Konfiguration zu aktualisieren, ohne die übrige Anwendung hochzuladen:
./appengine-java-sdk/bin/appcfg.sh -A your-app-id -V app-version update_cron [YOUR_APP_DIR]
Alle Cronjobs löschen
So löschen Sie alle Cronjobs:
Bearbeiten Sie den Inhalt der Datei
cron.xml
so:<?xml version="1.0" encoding="UTF-8"?> <cronentries/>
Stellen Sie die Datei
cron.xml
in App Engine bereit.
URLs für Cron sichern
Wenn Sie nicht möchten, dass Nutzer auf URLs zugreifen, die von geplanten Aufgaben verwendet werden, können Sie den Zugriff auf Administratorkonten einschränken. Geplante Aufgaben können auf URLs für Administratoren zugreifen. Weitere Informationen zum Einschränken von URLs finden Sie unter Sicherheit und Authentifizierung. Ein Beispiel, das Sie in
web.xml
verwenden würden, um alle URLs beginnend mit/cron/
auf Administratoren zu beschränken, ist Folgendes:<security-constraint> <web-resource-collection> <web-resource-name>cron</web-resource-name> <url-pattern>/cron/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> </auth-constraint> </security-constraint>
Weitere Informationen zum Format von
web.xml
finden Sie in der Dokumentation zum Bereitstellungsdeskriptor.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.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.xml.