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 der Anwendung, in der der Cronjob konfiguriert ist. Beim Aufruf führt der Handler für diesen Endpunkt die Logik aus.
Der Cron-Dienst von App Engine kann nicht zum Aufrufen von Webendpunkten außerhalb der App Engine-Hostanwendung verwendet werden. Er kann nicht dazu verwendet werden, um App Engine-Endpunkte aus anderen Anwendungen außer der Host-App aufzurufen.
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:
- Owner
- Editor
Sie können die Berechtigung in der Google Cloud Console auf der Seite „IAM“ festlegen.
Cronjob erstellen
- Erstellen Sie die Datei
cron.yaml
im Stammverzeichnis Ihrer Anwendung (zusätzlich zur Dateiapp.yaml
). 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. Um weitere Informationen zu den Elementen der Dateicron.yaml
zu erhalten prüfen Sie die Syntax und Optionen von cron.yaml.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.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.
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.yaml
-Datei den Blockretry_parameters
auf. 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:
Bearbeiten Sie den Inhalt der Datei
cron.yaml
so:cron:
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
könnte 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.