Auf dieser Seite wird beschrieben, wie Sie Aufgaben nach allen oder einigen Fehlern automatisch wiederholen können.
Ein Batch-Job schlägt aus verschiedenen Gründen fehl, wenn mindestens eine seiner Aufgaben fehlschlägt. Standardmäßig wird jede Aufgabe in einem Job nur einmal ausgeführt. Wenn eine Aufgabe fehlschlägt, wird sie nicht wiederholt. Einige Probleme, die zum Fehlschlagen einer Aufgabe führen, lassen sich jedoch einfach beheben, indem Sie die Aufgabe wiederholen. In diesen Fällen kann die Konfiguration des Jobs so konfiguriert werden, dass Aufgaben automatisch wiederholt werden. Das kann die Fehlerbehebung und die Gesamtausführungszeit von Jobs erheblich reduzieren.
Automatische Wiederholungsversuche eignen sich gut für los gekoppelte (unabhängige) Aufgaben und können bei einer Vielzahl von Problemen helfen. Durch automatische Aufgabenwiederholungen 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 Aufgabenwiederholungen für jede Aufgabe konfigurieren. Insbesondere können Sie für jede Aufgabe eine der folgenden Konfigurationsoptionen verwenden:
- Standardmäßig wird keine Aufgabe wiederholt, wenn sie fehlschlägt.
- Aufgaben für alle Fehler wiederholen: Sie können festlegen, wie oft fehlgeschlagene Tasks maximal automatisch wiederholt werden sollen. Sie können zwischen 0 (Standardeinstellung) und 10 Wiederholungen angeben.
- Aufgaben bei einigen Fehlern wiederholen: Für bestimmte Fehler können Sie verschiedene Aufgabenaktionen konfigurieren – entweder automatisch oder ohne Wiederholungsversuch. Für alle nicht angegebenen Fehler wird die gegenteilige Aktion ausgeführt. Spezifische Fehler lassen sich jeweils durch einen von Ihrer Anwendung oder Batch definierten Exit-Code identifizieren.
Hinweise
- Wenn Sie Batch noch nicht verwendet haben, lesen Sie Erste Schritte mit Batch. Aktivieren Sie Batch, indem Sie die Voraussetzungen für Projekte und Nutzer erfüllen.
-
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zu gewähren, damit Sie die Berechtigungen erhalten, die Sie zum Erstellen eines Jobs benötigen:
-
Batchjob-Bearbeiter (
roles/batch.jobsEditor
) für das Projekt -
Dienstkontonutzer (
roles/iam.serviceAccountUser
) für das Dienstkonto des Jobs, das standardmäßig das Compute Engine-Standarddienstkonto ist
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.
Möglicherweise können Sie die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
-
Batchjob-Bearbeiter (
Aufgaben bei allen Fehlern wiederholen
Sie können die maximale Anzahl automatischer Wiederholungsversuche (Feld maxRetryCount
) für die fehlgeschlagenen Aufgaben eines Jobs mithilfe der gcloud CLI oder Batch API definieren.
gcloud
Erstellen Sie eine JSON-Datei, die die Konfigurationsdetails des Jobs und das Feld
maxRetryCount
angibt.Um beispielsweise einen einfachen Skriptjob zu erstellen, 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 Wiederholungen für jede Aufgabe. Damit ein Job fehlgeschlagene Aufgaben wiederholen kann, muss dieser Wert auf eine Ganzzahl zwischen1
und10
festgelegt werden. Wenn das FeldmaxRetryCount
nicht angegeben ist, ist der Standardwert0
. Das bedeutet, dass keine Aufgaben wiederholt 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
: der Standort des Jobs.JSON_CONFIGURATION_FILE
: der Pfad für eine JSON-Datei mit den Konfigurationsdetails des Jobs.
API
Stellen Sie eine POST
-Anfrage an die Methode jobs.create
, die das Feld maxRetryCount
angibt.
Um beispielsweise einen einfachen Skriptjob zu erstellen, 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
: der Standort des Jobs.JOB_NAME
: der Name des Jobs.MAX_RETRY_COUNT
: Die maximale Anzahl der Wiederholungsversuche für jede Aufgabe. Damit ein Job fehlgeschlagene Aufgaben wiederholen kann, muss dieser Wert auf eine Ganzzahl zwischen1
und10
festgelegt werden. Wenn das FeldmaxRetryCount
nicht angegeben ist, ist der Standardwert0
. Das bedeutet, dass keine Aufgaben wiederholt werden.
Aufgaben bei einigen Fehlern wiederholen
Mit Lebenszyklusrichtlinien (Feld lifecyclePolicies[]
) können Sie festlegen, wie ein Job verschiedene Aufgabenfehler behandeln soll.
Eine Lebenszyklusrichtlinie besteht aus einer Aktion (Feld action
), einer Aktionsbedingung (Feld actionCondition
) und einem Exit-Code (Feld exitCodes[]
).
Die angegebene Aktion wird immer dann ausgeführt, wenn die Aktionsbedingung – ein bestimmter Exit-Code – auftritt.
Sie können eine der folgenden Aktionen angeben:
RETRY_TASK
: Wiederholung von Aufgaben, die mit den im FeldexitCodes[]
angegebenen Exit-Codes fehlschlagen. Aufgaben, die mit nicht angegebenen Exit-Codes fehlschlagen, werden nicht wiederholt.FAIL_TASK
: Es werden keine Aufgaben wiederholt, die mit den im FeldexitCodes[]
angegebenen Exit-Codes fehlschlagen. Aufgaben, die mit nicht angegebenen Exit-Codes fehlschlagen, werden wiederholt.
Insbesondere alle Aufgaben, die mit nicht angegebenen Exit-Codes fehlschlagen, führen die entgegengesetzte Aktion aus. Einige Exit-Codes werden wiederholt und andere schlagen fehl.
Damit die Lebenszyklusrichtlinie wie erwartet funktioniert, müssen Sie auch die maximale Anzahl automatischer Wiederholungsversuche (Feld maxRetryCount
) definieren, damit der Job fehlgeschlagene Aufgaben mindestens einmal automatisch wiederholt.
Jeder Exit-Code steht für einen bestimmten Fehler, der entweder von Ihrer Anwendung oder Batch definiert wird. Die Exit-Codes von 50001 bis 59999 sind reserviert und für Batch definiert. Weitere Informationen zu den reservierten Exit-Codes finden Sie unter Fehlerbehebung.
Mit der gcloud CLI oder Batch API können Sie festlegen, dass ein Job Aufgaben nach bestimmten Fehlern wiederholt oder fehlschlägt.
gcloud
Erstellen Sie eine JSON-Datei, die die Konfigurationsdetails des Jobs, das Feld
maxRetryCount
und die UnterfelderlifecyclePolicies[]
angibt.Um einen einfachen Skriptjob zu erstellen, der fehlgeschlagene Aufgaben nur für einige Exit-Codes wiederholt, 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 der Wiederholungsversuche für jede Aufgabe. Damit ein Job fehlgeschlagene Aufgaben wiederholen kann, muss dieser Wert auf eine Ganzzahl zwischen1
und10
festgelegt werden. Wenn das FeldmaxRetryCount
nicht angegeben ist, ist der Standardwert0
. Das bedeutet, dass keine Aufgaben wiederholt werden.ACTION
: Die Aktion, entwederRETRY_TASK
oderFAIL_TASK
, die für Aufgaben ausgeführt werden soll, die mit den angegebenen Exit-Codes fehlschlagen. Aufgaben, die mit nicht angegebenen Exit-Codes fehlschlagen, führen die andere Aktion aus.EXIT_CODES
: eine durch Kommas getrennte Liste eines oder mehrerer Exit-Codes, die die angegebene Aktion auslösen sollen, z. B.50001, 50002
.Jeder Exit-Code kann von Ihrer Anwendung oder Ihrem Batch definiert werden. Die Exit-Codes von
50001
bis59999
sind von Batch reserviert. Weitere Informationen zu den reservierten Exit-Codes finden Sie unter Fehlerbehebung.
Der folgende Job wiederholt beispielsweise nur Aufgaben, die aufgrund des vorzeitigen Beendens von Spot-VMs fehlschlagen.
{ "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
: der Standort des Jobs.JSON_CONFIGURATION_FILE
: der Pfad für eine JSON-Datei mit den Konfigurationsdetails des Jobs.
API
Stellen Sie eine POST
-Anfrage an die Methode jobs.create
, die das Feld maxRetryCount
und die untergeordneten Felder lifecyclePolicies[]
angibt.
Um einen einfachen Skriptjob zu erstellen, der fehlgeschlagene Aufgaben nur für einige Exit-Codes wiederholt, 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
: der Standort des Jobs.JOB_NAME
: der Name des Jobs.MAX_RETRY_COUNT
: die maximale Anzahl der Wiederholungsversuche für jede Aufgabe. Damit ein Job fehlgeschlagene Aufgaben wiederholen kann, muss dieser Wert auf eine Ganzzahl zwischen1
und10
festgelegt werden. Wenn das FeldmaxRetryCount
nicht angegeben ist, ist der Standardwert0
. Das bedeutet, dass keine Aufgaben wiederholt werden.ACTION
: Die Aktion, entwederRETRY_TASK
oderFAIL_TASK
, die für Aufgaben ausgeführt werden soll, die mit den angegebenen Exit-Codes fehlschlagen. Aufgaben, die mit nicht angegebenen Exit-Codes fehlschlagen, führen die andere Aktion aus.EXIT_CODES
: eine durch Kommas getrennte Liste eines oder mehrerer Exit-Codes, die die angegebene Aktion auslösen sollen, z. B.50001, 50002
.Jeder Exit-Code kann von Ihrer Anwendung oder Ihrem Batch definiert werden. Die Exit-Codes von
50001
bis59999
sind von Batch reserviert. Weitere Informationen zu den reservierten Exit-Codes finden Sie unter Fehlerbehebung.
Der folgende Job wiederholt beispielsweise nur Aufgaben, die aufgrund des vorzeitigen Beendens von Spot-VMs fehlschlagen.
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 auf Grundlage der Anzahl der Wiederholungsversuche ändern
Nachdem Sie die automatischen Wiederholungsversuche für eine Aufgabe aktiviert haben, wie in den vorherigen Abschnitten auf dieser Seite beschrieben, können Sie die Runnables auch so aktualisieren, dass die vordefinierte Umgebungsvariable BATCH_TASK_RETRY_ATTEMPT
verwendet wird.
Die Variable BATCH_TASK_RETRY_ATTEMPT
beschreibt, wie oft diese Aufgabe bereits versucht wurde. Verwenden Sie die Variable BATCH_TASK_RETRY_ATTEMPT
in Ihren Runnables, wenn sich eine Aufgabe je nach Anzahl der Wiederholungsversuche anders verhalten soll.
Wenn beispielsweise eine Aufgabe wiederholt wird, können Sie prüfen, welche Befehle beim vorherigen Versuch bereits erfolgreich ausgeführt wurden. Weitere Informationen finden Sie unter Vordefinierte Umgebungsvariablen.
Nächste Schritte
- Informationen zu Problemen beim Erstellen oder Ausführen eines Jobs finden Sie unter Fehlerbehebung.
- Aufträge und Aufgaben ansehen
- Möglichkeiten zur Joberstellung