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. aus verschiedenen Gründen. 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 Abbruch einer Aufgabe führen, lassen sich jedoch ganz einfach beheben, indem Sie die Aufgabe noch einmal versuchen. In diesen Fällen kann es sehr hilfreich sein, den Job so zu konfigurieren, dass Aufgaben automatisch noch einmal ausgeführt werden. So lassen sich die Fehlerbehebung und die Gesamtlaufzeit Ihrer Jobs erheblich verkürzen.
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 werden Aufgaben nach einem Scheitern nicht wiederholt.
- Aufgaben bei allen Fehlern wiederholen: Sie können wie oft fehlgeschlagene Aufgaben maximal wiederholt werden sollen. Sie können zwischen 0 (Standard) und 10 Wiederholungsversuchen angeben.
- Wiederholen Sie die Aufgaben bei einigen Fehlern: Sie können verschiedene Aufgaben Aktionen – entweder automatische Wiederholung oder Fehler ohne Wiederholung – für Fehler. Bei allen nicht angegebenen Fehlern wird die gegenteilige 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 zum ersten Mal verwenden, lesen Sie Erste Schritte mit Batch und aktivieren Sie Batch, indem Sie den Voraussetzungen für Projekte und Nutzer.
-
Um die Berechtigungen zu erhalten, die Sie zum Erstellen eines Jobs benötigen, bitten Sie Ihren Administrator, Ihnen folgenden IAM-Rollen:
-
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 Wiederholungsversuche (Feld maxRetryCount
)
für fehlgeschlagene Aufgaben eines Jobs mithilfe der gcloud CLI oder Batch API finden.
gcloud
Erstellen Sie eine JSON-Datei, die die Konfigurationsdetails des Jobs und den
maxRetryCount
.Um beispielsweise einen einfachen Skriptjob zu erstellen, in dem das maximale für fehlgeschlagene Aufgaben versucht, eine JSON-Datei mit folgendem Inhalt zu erstellen:
{ "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, Dieser Wert muss 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 zum Erstellen und Ausführen des Jobs die Methode
gcloud batch jobs submit
-Befehl: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
, in der das Feld maxRetryCount
angegeben ist.
Um beispielsweise einen einfachen Skriptjob zu erstellen, in dem das maximale für fehlgeschlagene Aufgaben erneut versuchen möchten, stellen Sie 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 werden. Wenn das FeldmaxRetryCount
nicht angegeben ist, ist der Standardwert0
, Das bedeutet, dass keine Aufgaben wiederholt werden.
Aufgaben bei einigen Fehlern wiederholen
Sie können definieren, wie ein Job verschiedene Aufgabenfehler behandeln soll, indem Sie
Lebenszyklusrichtlinien (Feld lifecyclePolicies[]
).
Eine Lebenszyklusrichtlinie besteht aus einem
action (Feld action
),
Aktionsbedingung (Feld actionCondition
),
und Exit-Code (Feld exitCodes[]
).
Die angegebene Aktion wird immer dann ausgeführt, wenn der
Aktionsbedingungen – ein bestimmter Exit-Code – auftritt.
Sie können eine der folgenden Aktionen angeben:
RETRY_TASK
: Aufgaben wiederholen, die mit den angegebenen Exit-Codes imexitCodes[]
. Aufgaben, die mit einem nicht angegebenen Exit-Code fehlschlagen, werden nicht wiederholt.FAIL_TASK
: Aufgaben, die mit den im FeldexitCodes[]
angegebenen Exitcodes fehlschlagen, werden nicht noch einmal ausgeführt. Aufgaben, die mit nicht angegebenen Exit-Codes fehlschlagen, sind den Vorgang wiederholen.
Alle Aufgaben, die mit nicht angegebenen Exit-Codes fehlschlagen, erhalten
gegensätzliche Aktion – 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
)
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 Ihrem Batch definiert wird. Die Exit-Codes von 50001 bis 59999 sind reserviert und durch Batch. Weitere Informationen zu reservierten Exit-Codes finden Sie unter Fehlerbehebung
Sie können festlegen, dass ein Job Aufgaben nach bestimmten Fehlern wiederholt oder fehlschlagen soll mit der gcloud CLI oder Batch API verwenden.
gcloud
Erstellen Sie eine JSON-Datei mit den Konfigurationsdetails des Jobs, dem
maxRetryCount
und die UnterfelderlifecyclePolicies[]
.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 ein Job fehlgeschlagene Aufgaben wiederholen kann, Dieser Wert muss 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
für Aufgaben, bei denen ein Fehler auftritt die angegebenen Exit-Codes. Aufgaben, die mit einem nicht angegebenen Exit fehlschlagen führen die Codes die andere Aktion aus.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 von Batch reserviert. Weitere Informationen zu reservierten Exit-Codes finden Sie unter Fehlerbehebung
Der folgende Job wiederholt beispielsweise nur Aufgaben, die aufgrund bis hin zum vorzeitigen Beenden von Spot-VMs.
{ "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 zum Erstellen und Ausführen des Jobs die Methode
gcloud batch jobs submit
-Befehl: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 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 Zahl von Wiederholungsversuchen für jede Aufgabe. Damit ein Job fehlgeschlagene Aufgaben wiederholen kann, Dieser Wert muss 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
für Aufgaben, bei denen ein Fehler auftritt die angegebenen Exit-Codes. Aufgaben, die mit einem nicht angegebenen Exit fehlschlagen führen die Codes die andere Aktion aus.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 von 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 Wiederholungsversuche ändern
Optional, nachdem Sie automatische Wiederholungsversuche für eine Aufgabe aktiviert haben
wie in den vorherigen Abschnitten auf dieser Seite beschrieben, können Sie
Aktualisieren Sie Ihre Runnables, um die
Vordefinierte Umgebungsvariable BATCH_TASK_RETRY_ATTEMPT
.
Die Variable BATCH_TASK_RETRY_ATTEMPT
gibt an, wie oft diese Aufgabe bereits versucht wurde. Verwenden Sie die Methode
BATCH_TASK_RETRY_ATTEMPT
in Ihren Runnables, wenn Sie möchten
das sich je nach Anzahl der Wiederholungen
unterschiedlich verhält.
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 Abschnitt Fehlerbehebung.
- Aufgaben und Jobs ansehen
- Weitere Informationen zu Optionen zum Erstellen von Jobs