Auf dieser Seite wird beschrieben, wie Sie Aufgaben automatisch nach allen oder einigen Fehlern wiederholen.
Ein Batchjob schlägt fehl, wenn mindestens eine seiner Aufgaben fehlschlägt. Das kann aus verschiedenen Gründen passieren. Standardmäßig wird jede Aufgabe in einem Job nur einmal ausgeführt. Wenn eine Aufgabe fehlschlägt, wird sie nicht wiederholt. Einige Probleme, die dazu führen, dass eine Aufgabe fehlschlägt, lassen sich jedoch ganz einfach beheben, indem Sie die Aufgabe noch einmal versuchen. In diesen Fällen kann es die Fehlerbehebung und die Gesamtlaufzeit Ihrer Jobs erheblich erleichtern, wenn Sie den Job so konfigurieren, dass Aufgaben automatisch noch einmal versucht werden.
Automatische Wiederholungen eignen sich gut für lose gekoppelte (unabhängige) Aufgaben und können bei einer Vielzahl von Problemen helfen. So lassen sich beispielsweise zeitkritische Probleme wie die folgenden beheben:
- Vorzeitiges Beenden von Spot-VMs
- VM-Wartungsereignisse und Hostfehler
- vorübergehende Netzwerkfehler
Sie können beim Erstellen eines Jobs automatische Wiederholungen für jede Aufgabe konfigurieren. Für jede Aufgabe können Sie eine der folgenden Konfigurationsoptionen verwenden:
- Standardmäßig wird jede Aufgabe nicht wiederholt, wenn sie fehlschlägt.
- Aufgaben bei allen Fehlern noch einmal versuchen: Sie können die maximale Anzahl der automatischen Wiederholungen für fehlgeschlagene Aufgaben konfigurieren. Sie können zwischen 0 (Standard) und 10 Wiederholungsversuche angeben.
- Aufgaben bei bestimmten Fehlern noch einmal versuchen: Sie können für bestimmte Fehler verschiedene Aufgabenaktionen konfigurieren, entweder einen automatischen Wiederholungsversuch oder einen Fehler ohne Wiederholungsversuch. Bei allen nicht angegebenen Fehlern wird die umgekehrte Aktion ausgeführt. Bestimmte Fehler können jeweils durch einen Exit-Code identifiziert werden, der von Ihrer Anwendung oder Ihrem Batch definiert wird.
Hinweise
- Wenn Sie Batch noch nicht verwendet haben, lesen Sie den Hilfeartikel Batch-Dateien erstellen und ausführen und aktivieren Sie Batch, indem Sie die Voraussetzungen für Projekte und Nutzer erfüllen.
-
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen eines Jobs benötigen:
-
Batch-Job-Bearbeiter (
roles/batch.jobsEditor
) für das Projekt -
Dienstkontonutzer (
roles/iam.serviceAccountUser
) im Dienstkonto des Jobs, das standardmäßig das Compute Engine-Standarddienstkonto ist
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
-
Batch-Job-Bearbeiter (
Aufgaben bei allen Fehlern wiederholen
Sie können die maximale Anzahl automatischer Wiederholungen (maxRetryCount
-Feld) für die fehlgeschlagenen Aufgaben eines Jobs mit der gcloud CLI oder der Batch API definieren.
gcloud
Erstellen Sie eine JSON-Datei, die die Konfigurationsdetails des Jobs und das Feld
maxRetryCount
angibt.Wenn Sie beispielsweise einen einfachen Script-Job erstellen möchten, der die maximale Anzahl von Wiederholungen für fehlgeschlagene Aufgaben angibt, erstellen Sie eine JSON-Datei mit folgendem Inhalt:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}" } } ], "maxRetryCount": MAX_RETRY_COUNT }, "taskCount": 3 } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }
Ersetzen Sie
MAX_RETRY_COUNT
durch die maximale Anzahl von Wiederholungsversuchen für jede Aufgabe. Damit fehlgeschlagene Aufgaben für einen Job noch einmal ausgeführt werden können, muss dieser Wert auf eine Ganzzahl zwischen1
und10
festgelegt sein. Wenn das FeldmaxRetryCount
nicht angegeben ist, ist der Standardwert0
. Das bedeutet, dass keine Aufgaben noch einmal ausgeführt werden.Verwenden Sie den Befehl
gcloud batch jobs submit
, um den Job zu erstellen und auszuführen:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Ersetzen Sie Folgendes:
JOB_NAME
: Der Name des Jobs.LOCATION
: den Standort der Stelle.JSON_CONFIGURATION_FILE
: der Pfad zu einer JSON-Datei mit den Konfigurationsdetails des Jobs.
API
Stellen Sie eine POST
-Anfrage an die Methode jobs.create
, in der das Feld maxRetryCount
angegeben ist.
Wenn Sie beispielsweise einen einfachen Script-Job erstellen möchten, der die maximale Anzahl von Wiederholungen für fehlgeschlagene Aufgaben angibt, stellen Sie die folgende Anfrage:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world from task ${BATCH_TASK_INDEX}"
}
}
],
"maxRetryCount": MAX_RETRY_COUNT
},
"taskCount": 3
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
Ersetzen Sie Folgendes:
PROJECT_ID
: die Projekt-ID Ihres Projekts.LOCATION
: den Standort der Stelle.JOB_NAME
: Der Name des Jobs.MAX_RETRY_COUNT
: Die maximale Anzahl von Wiederholungen für jede Aufgabe. Damit fehlgeschlagene Aufgaben für einen Job noch einmal ausgeführt werden können, muss dieser Wert auf eine Ganzzahl zwischen1
und10
festgelegt sein. Wenn das FeldmaxRetryCount
nicht angegeben ist, ist der Standardwert0
. Das bedeutet, dass keine Aufgaben noch einmal ausgeführt werden.
Aufgaben bei einigen Fehlern wiederholen
Mithilfe von Lebenszyklusrichtlinien (lifecyclePolicies[]
-Feld) können Sie festlegen, wie ein Job mit verschiedenen Aufgabenausfällen umgehen soll.
Eine Lebenszyklusrichtlinie besteht aus einer Aktion (action
-Feld), einer Aktionbedingung (actionCondition
-Feld) und einem Beendigungscode (exitCodes[]
-Feld).
Die angegebene Aktion wird ausgeführt, wenn die Aktionsbedingung – ein bestimmter Exit-Code – eintritt.
Sie können eine der folgenden Aktionen angeben:
RETRY_TASK
: Aufgaben, die mit den im FeldexitCodes[]
angegebenen Beendigungscodes fehlschlagen, werden noch einmal ausgeführt. Aufgaben, die mit einem nicht angegebenen Exit-Code fehlschlagen, werden nicht wiederholt.FAIL_TASK
: Aufgaben, die mit den im FeldexitCodes[]
angegebenen Beendigungscodes fehlschlagen, werden nicht noch einmal ausgeführt. Aufgaben, die mit einem nicht angegebenen Exit-Code fehlschlagen, werden noch einmal ausgeführt.
Bei Aufgaben, die mit nicht angegebenen Exit-Codes fehlschlagen, wird die entgegengesetzte Aktion ausgeführt: Bei einigen Exit-Codes wird ein neuer Versuch unternommen, bei anderen wird der Vorgang abgebrochen.
Damit die Lebenszyklusrichtlinie wie erwartet funktioniert, müssen Sie außerdem die maximale Anzahl automatischer Wiederholungen (maxRetryCount
-Feld) definieren, damit fehlgeschlagene Aufgaben mindestens einmal automatisch wiederholt werden können.
Jeder Exit-Code steht für einen bestimmten Fehler, der entweder von Ihrer Anwendung oder Ihrem Batch definiert wird. Die Exitcodes von 50001 bis 59999 sind reserviert und werden von Batch definiert. Weitere Informationen zu den reservierten Beendigungscodes finden Sie unter Fehlerbehebung.
Mit der gcloud CLI oder der Batch API können Sie festlegen, dass Aufgaben nach bestimmten Fehlern für einen Job noch einmal ausgeführt oder fehlgeschlagen werden sollen.
gcloud
Erstellen Sie eine JSON-Datei, in der die Konfigurationsdetails des Jobs, das Feld
maxRetryCount
und die UnterfelderlifecyclePolicies[]
angegeben sind.Wenn Sie einen einfachen Script-Job erstellen möchten, bei dem fehlgeschlagene Aufgaben nur bei bestimmten Beendigungscodes noch einmal ausgeführt werden, erstellen Sie eine JSON-Datei mit folgendem Inhalt:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}" } } ], "maxRetryCount": MAX_RETRY_COUNT, "lifecyclePolicies": [ { "action": "ACTION", "actionCondition": { "exitCodes": [EXIT_CODES] } } ] } } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }
Ersetzen Sie Folgendes:
MAX_RETRY_COUNT
: die maximale Anzahl von Wiederholungen für jede Aufgabe. Damit fehlgeschlagene Aufgaben für einen Job noch einmal ausgeführt werden können, muss dieser Wert auf eine Ganzzahl zwischen1
und10
festgelegt werden. Wenn das FeldmaxRetryCount
nicht angegeben ist, ist der Standardwert0
. Das bedeutet, dass keine Aufgaben noch einmal ausgeführt werden.ACTION
: Die Aktion, entwederRETRY_TASK
oderFAIL_TASK
, die für Aufgaben ausgeführt werden soll, die mit den angegebenen Endcodes fehlschlagen. Bei Aufgaben, die mit nicht angegebenen Endcodes fehlschlagen, wird die andere Aktion ausgeführt.EXIT_CODES
: eine durch Kommas getrennte Liste mit einem oder mehreren Endcodes, mit denen die angegebene Aktion ausgelöst werden soll, z. B.50001, 50002
.Jeder Exit-Code kann von Ihrer Anwendung oder Ihrem Batch definiert werden. Die Exit-Codes von
50001
bis59999
sind für Batch reserviert. Weitere Informationen zu den reservierten Beendigungscodes finden Sie unter Fehlerbehebung.
Im folgenden Job werden beispielsweise nur Aufgaben noch einmal ausgeführt, die aufgrund der Voraktivierung von Spot-VMs fehlgeschlagen sind.
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "sleep 30" } } ], "maxRetryCount": 3, "lifecyclePolicies": [ { "action": "RETRY_TASK", "actionCondition": { "exitCodes": [50001] } } ] } } ], "allocationPolicy": { "instances": [ { "policy": { "machineType": "e2-standard-4", "provisioningModel": "SPOT" } } ] } }
Verwenden Sie den Befehl
gcloud batch jobs submit
, um den Job zu erstellen und auszuführen:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Ersetzen Sie Folgendes:
JOB_NAME
: Der Name des Jobs.LOCATION
: den Standort der Stelle.JSON_CONFIGURATION_FILE
: der Pfad zu einer JSON-Datei mit den Konfigurationsdetails des Jobs.
API
Stellen Sie eine POST
-Anfrage an die Methode jobs.create
, in der das Feld maxRetryCount
und die Unterfelder lifecyclePolicies[]
angegeben sind.
Wenn Sie einen einfachen Script-Job erstellen möchten, bei dem fehlgeschlagene Aufgaben nur bei bestimmten Exit-Codes noch einmal ausgeführt werden, stellen Sie die folgende Anfrage:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world from task ${BATCH_TASK_INDEX}"
}
}
],
"maxRetryCount": MAX_RETRY_COUNT,
"lifecyclePolicies": [
{
"action": "ACTION",
"actionCondition": {
"exitCodes": [EXIT_CODES]
}
}
]
}
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
Ersetzen Sie Folgendes:
PROJECT_ID
: die Projekt-ID Ihres Projekts.LOCATION
: den Standort der Stelle.JOB_NAME
: Der Name des Jobs.MAX_RETRY_COUNT
: die maximale Anzahl von Wiederholungen für jede Aufgabe. Damit fehlgeschlagene Aufgaben für einen Job noch einmal ausgeführt werden können, muss dieser Wert auf eine Ganzzahl zwischen1
und10
festgelegt sein. Wenn das FeldmaxRetryCount
nicht angegeben ist, ist der Standardwert0
. Das bedeutet, dass keine Aufgaben noch einmal ausgeführt werden.ACTION
: Die Aktion, entwederRETRY_TASK
oderFAIL_TASK
, die für Aufgaben ausgeführt werden soll, die mit den angegebenen Endcodes fehlschlagen. Bei Aufgaben, die mit nicht angegebenen Endcodes fehlschlagen, wird die andere Aktion ausgeführt.EXIT_CODES
: eine durch Kommas getrennte Liste mit einem oder mehreren Endcodes, mit denen die angegebene Aktion ausgelöst werden soll, z. B.50001, 50002
.Jeder Exit-Code kann von Ihrer Anwendung oder Ihrem Batch definiert werden. Die Exit-Codes von
50001
bis59999
sind für Batch reserviert. Weitere Informationen zu den reservierten Beendigungscodes finden Sie unter Fehlerbehebung.
Im folgenden Job werden beispielsweise nur Aufgaben noch einmal ausgeführt, die aufgrund der Voraktivierung von Spot-VMs fehlgeschlagen sind.
POST https://batch.googleapis.com/v1/projects/example-project/locations/us-central1/jobs?job_id=example-job
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "sleep 30"
}
}
],
"maxRetryCount": 3,
"lifecyclePolicies": [
{
"action": "RETRY_TASK",
"actionCondition": {
"exitCodes": [50001]
}
}
]
}
}
],
"allocationPolicy": {
"instances": [
{
"policy": {
"machineType": "e2-standard-4",
"provisioningModel": "SPOT"
}
}
]
}
}
Aufgabenverhalten basierend auf der Anzahl der Wiederholungen ändern
Nachdem Sie wie in den vorherigen Abschnitten auf dieser Seite beschrieben automatische Wiederholungen für eine Aufgabe aktiviert haben, können Sie Ihre ausführbaren Dateien optional so aktualisieren, dass die vordefinierte Umgebungsvariable BATCH_TASK_RETRY_ATTEMPT
verwendet wird.
Die Variable BATCH_TASK_RETRY_ATTEMPT
gibt an, wie oft diese Aufgabe bereits versucht wurde. Verwenden Sie die Variable BATCH_TASK_RETRY_ATTEMPT
in Ihren ausführbaren Dateien, wenn sich eine Aufgabe je nach Anzahl der Wiederholungen unterschiedlich verhalten soll.
Wenn eine Aufgabe beispielsweise wiederholt wird, können Sie prüfen, welche Befehle bereits beim vorherigen Versuch erfolgreich ausgeführt wurden. Weitere Informationen finden Sie unter Vordefinierte Umgebungsvariablen.
Nächste Schritte
- Wenn beim Erstellen oder Ausführen eines Jobs Probleme auftreten, lesen Sie den Hilfeartikel Fehlerbehebung.
- Aufgaben und Jobs ansehen
- Weitere Informationen zu Optionen zum Erstellen von Jobs