Auf dieser Seite wird beschrieben, wie Aufgaben nach allen oder einigen Fehlern automatisch wiederholt werden.
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. 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. Dadurch können Sie die Probleme bei der Fehlerbehebung und die Gesamtausführungszeit Ihrer 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 können beispielsweise zeitkritische Probleme wie die folgenden behoben werden:
- vorzeitiges Beenden von Spot-VMs
- VM-Wartungsereignisse und Hostfehler
- Vorübergehende Netzwerkfehler
Beim Erstellen eines Jobs können Sie 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 bei allen Fehlern wiederholen: Sie können die maximalen Zeiten für die automatische Wiederholung fehlgeschlagener Aufgaben konfigurieren. Sie können einen Wiederholungsversuch zwischen 0 (Standardeinstellung) und 10 Wiederholungen festlegen.
- Aufgaben bei einigen Fehlern wiederholen: Sie können für bestimmte Fehler verschiedene Aufgabenaktionen konfigurieren. Diese können entweder automatisch wiederholt werden oder ohne Wiederholungsversuche fehlschlagen. Für alle nicht angegebenen Fehler wird die gegenteilige Aktion ausgeführt. Spezifische Fehler können jeweils durch einen von der Anwendung oder Batch definierten Exit-Code identifiziert werden.
Hinweise
- Wenn Sie Batch noch nie verwendet haben, lesen Sie die Informationen unter 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:
-
Batch Job Editor (
roles/batch.jobsEditor
) für das Projekt -
Dienstkontonutzer (
roles/iam.serviceAccountUser
) im Dienstkonto des Jobs. Dies ist standardmäßig das Compute Engine-Standarddienstkonto.
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.
-
Batch Job Editor (
Aufgaben bei 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.Wenn Sie beispielsweise einen einfachen Skriptjob 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 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.
Wenn Sie beispielsweise einen einfachen Skriptjob 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
: 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
Mithilfe von Lebenszyklusrichtlinien (Feld lifecyclePolicies[]
) können Sie definieren, 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 – eintritt.
Sie können eine der folgenden Aktionen festlegen:
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
: Keine Wiederholung von Aufgaben, die mit den im FeldexitCodes[]
angegebenen Exit-Codes fehlschlagen. Aufgaben, die mit nicht angegebenen Exit-Codes fehlschlagen, werden wiederholt.
Vor allem, wenn Aufgaben mit nicht angegebenen Exit-Codes fehlschlagen, wird die entgegengesetzte Aktion ausgeführt. Einige Exit-Codes werden wiederholt, 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 automatisch mindestens einmal wiederholen kann.
Jeder Exit-Code steht für einen bestimmten Fehler, der entweder von Ihrer Anwendung oder von Batch definiert wird. Die Exit-Codes von 50001 bis 59999 sind reserviert und von Batch definiert. Weitere Informationen zu den reservierten Exit-Codes finden Sie unter Fehlerbehebung.
Sie können mithilfe der gcloud CLI oder Batch API für einen Job festlegen, dass Aufgaben nach bestimmten Fehlern wiederholt werden oder fehlschlagen sollen.
gcloud
Erstellen Sie eine JSON-Datei, die die Konfigurationsdetails des Jobs, das Feld
maxRetryCount
und die untergeordneten FelderlifecyclePolicies[]
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 (RETRY_TASK
oderFAIL_TASK
), die Sie für Aufgaben ausführen möchten, die mit den angegebenen Exit-Codes fehlschlagen. Bei Aufgaben, die mit nicht angegebenen Exit-Codes fehlschlagen, wird die andere Aktion ausgeführt.EXIT_CODES
: eine durch Kommas getrennte Liste mit einem oder mehreren 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.
Mit dem folgenden Job werden nur Aufgaben wiederholt, 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
, mit der das Feld maxRetryCount
und die Unterfelder lifecyclePolicies[]
angegeben werden.
Um einen einfachen Skriptjob zu erstellen, der fehlgeschlagene Aufgaben nur für einige Exit-Codes wiederholt, senden 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 (RETRY_TASK
oderFAIL_TASK
), die Sie für Aufgaben ausführen möchten, die mit den angegebenen Exit-Codes fehlschlagen. Bei Aufgaben, die mit nicht angegebenen Exit-Codes fehlschlagen, wird die andere Aktion ausgeführt.EXIT_CODES
: eine durch Kommas getrennte Liste mit einem oder mehreren 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.
Mit dem folgenden Job werden nur Aufgaben wiederholt, 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"
}
}
]
}
}
Nächste Schritte
- Wenn Probleme beim Erstellen oder Ausführen eines Jobs auftreten, lesen Sie die Informationen unter Fehlerbehebung.
- Aufträge und Aufgaben ansehen
- Weitere Informationen zu Joberstellungsoptionen