Wiederholungsversuche für Aufgaben automatisieren

Auf dieser Seite wird beschrieben, wie Sie Aufgaben nach allen oder einigen Fehlern automatisch 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 einfach beheben, indem Sie die Aufgabe noch einmal ausführen. In diesen Fällen kann es hilfreich sein, den Job so zu konfigurieren, dass Aufgaben automatisch wiederholt werden. So lassen sich Probleme bei der Fehlerbehebung und die Gesamtlaufzeit Ihrer Jobs erheblich reduzieren.

Automatische Wiederholungen eignen sich gut für lose gekoppelte (unabhängige) Aufgaben und können bei einer Vielzahl von Problemen helfen. Beispielsweise können zeitkritische Probleme wie die folgenden durch automatische Wiederholungen von Aufgaben behoben werden:

Sie können automatische Aufgabenwiederholungen für jede Aufgabe konfigurieren, wenn Sie einen Job erstellen. Für jede Aufgabe können Sie eine der folgenden Konfigurationsoptionen verwenden:

  • Standardmäßig wird jede Aufgabe, die fehlschlägt, nicht wiederholt.
  • Aufgaben bei allen Fehlern wiederholen: Sie können die maximale Anzahl an automatischen Wiederholungen für fehlgeschlagene Aufgaben konfigurieren. Sie können zwischen 0 (Standardeinstellung) und 10 Wiederholungsversuchen angeben.
  • Aufgaben bei bestimmten Fehlern wiederholen: Sie können für bestimmte Fehler verschiedene Aufgabenaktionen konfigurieren, z. B. automatisches Wiederholen oder Fehler ohne Wiederholung. Bei allen nicht angegebenen Fehlern wird die gegenteilige Aktion ausgeführt. Bestimmte Fehler können jeweils durch einen von Ihrer Anwendung oder Batch definierten Exitcode identifiziert werden.

Hinweise

  1. Wenn Sie Batch noch nicht verwendet haben, lesen Sie den Abschnitt Erste Schritte mit Batch und aktivieren Sie Batch, indem Sie die Voraussetzungen für Projekte und Nutzer erfüllen.
  2. Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen eines Jobs benötigen:

    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.

Aufgaben bei allen Fehlern wiederholen

Sie können die maximale Anzahl automatischer Wiederholungsversuche (Feld maxRetryCount) für fehlgeschlagene Aufgaben eines Jobs mit der gcloud CLI oder der Batch API definieren.

gcloud

  1. Erstellen Sie eine JSON-Datei, in der die Konfigurationsdetails des Jobs und das Feld maxRetryCount angegeben werden.

    Wenn Sie beispielsweise einen einfachen Script-Job erstellen möchten, in dem die maximale Anzahl von Wiederholungsversuchen für fehlgeschlagene Aufgaben angegeben wird, 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 zwischen 1 und 10 festgelegt werden. Wenn das Feld maxRetryCount nicht angegeben ist, ist der Standardwert 0. Das bedeutet, dass keine Aufgaben wiederholt werden.

  2. 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 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 Skriptjob erstellen möchten, in dem die maximale Anzahl von Wiederholungsversuchen für fehlgeschlagene Aufgaben angegeben wird, 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 von Wiederholungsversuchen für jede Aufgabe. Damit ein Job fehlgeschlagene Aufgaben wiederholen kann, muss dieser Wert auf eine Ganzzahl zwischen 1 und 10 festgelegt werden. Wenn das Feld maxRetryCount nicht angegeben ist, ist der Standardwert 0. Das bedeutet, dass keine Aufgaben wiederholt werden.

Aufgaben bei bestimmten Fehlern wiederholen

Sie können definieren, wie ein Job verschiedene Aufgabenfehler behandeln soll, indem Sie Lebenszyklusrichtlinien (Feld lifecyclePolicies[]) verwenden.

Eine Lebenszyklusrichtlinie besteht aus einer Aktion (Feld action), einer Aktionsbedingung (Feld actionCondition) und einem Beendigungscode (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 angeben:

  • RETRY_TASK: Aufgaben, die mit den im Feld exitCodes[] angegebenen Beendigungscodes fehlschlagen, werden wiederholt. Aufgaben, die mit nicht angegebenen Exit-Codes fehlschlagen, werden nicht wiederholt.
  • FAIL_TASK: Aufgaben, die mit den im Feld exitCodes[] angegebenen Exit-Codes fehlschlagen, werden nicht wiederholt. Aufgaben, die mit nicht angegebenen Exit-Codes fehlschlagen, werden noch einmal versucht.

Bei Aufgaben, die mit nicht angegebenen Exit-Codes fehlschlagen, wird die gegenteilige Aktion ausgeführt: Bei einigen Exit-Codes werden Wiederholungsversuche unternommen, bei anderen schlägt die Aufgabe fehl. Damit die Richtlinie für den Lebenszyklus wie erwartet funktioniert, müssen Sie daher auch die maximale Anzahl automatischer Wiederholungsversuche (maxRetryCount-Feld) definieren, damit für fehlgeschlagene Aufgaben im Job mindestens ein automatischer Wiederholungsversuch erfolgt.

Jeder Exit-Code steht für einen bestimmten Fehler, der entweder von Ihrer Anwendung oder von 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.

Sie können mit der gcloud CLI oder der Batch API festlegen, dass für einen Job nach bestimmten Fehlern versucht werden soll, Aufgaben noch einmal auszuführen, oder dass Aufgaben fehlschlagen sollen.

gcloud

  1. Erstellen Sie eine JSON-Datei, in der die Konfigurationsdetails des Jobs, das Feld maxRetryCount und die Unterfelder lifecyclePolicies[] angegeben werden.

    Wenn Sie einen einfachen Scriptjob erstellen möchten, bei dem fehlgeschlagene Aufgaben nur für bestimmte Beendigungscodes noch einmal versucht 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 Wiederholungsversuchen für jede Aufgabe. Damit ein Job fehlgeschlagene Aufgaben wiederholen kann, muss dieser Wert auf eine Ganzzahl zwischen 1 und 10 festgelegt werden. Wenn das Feld maxRetryCount nicht angegeben ist, ist der Standardwert 0. Das bedeutet, dass keine Aufgaben wiederholt werden.

    • ACTION: Die Aktion, entweder RETRY_TASK oder FAIL_TASK, die Sie für Aufgaben mit den angegebenen Beendigungscodes ausführen möchten. Bei Aufgaben, die mit nicht angegebenen Exitcodes 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 Beendigungscodes von 50001 bis 59999 sind für Batch reserviert. Weitere Informationen zu den reservierten Beendigungscodes finden Sie unter Fehlerbehebung.

    Im folgenden Beispiel 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"
            }
          }
        ]
      }
    }
    
  2. 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 zu einer JSON-Datei mit den Konfigurationsdetails des Jobs.

API

Senden Sie eine POST-Anfrage an die Methode jobs.create, in der das Feld maxRetryCount und die Unterfelder lifecyclePolicies[] angegeben sind.

So erstellen Sie einen einfachen Skriptjob, bei dem fehlgeschlagene Aufgaben nur für bestimmte Beendigungscodes wiederholt werden:

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 von Wiederholungsversuchen für jede Aufgabe. Damit ein Job fehlgeschlagene Aufgaben wiederholen kann, muss dieser Wert auf eine Ganzzahl zwischen 1 und 10 festgelegt werden. Wenn das Feld maxRetryCount nicht angegeben ist, ist der Standardwert 0. Das bedeutet, dass keine Aufgaben wiederholt werden.

  • ACTION: Die Aktion, entweder RETRY_TASK oder FAIL_TASK, die Sie für Aufgaben mit den angegebenen Beendigungscodes ausführen möchten. Bei Aufgaben, die mit nicht angegebenen Exitcodes 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 Beendigungscodes von 50001 bis 59999 sind für Batch reserviert. Weitere Informationen zu den reservierten Beendigungscodes finden Sie unter Fehlerbehebung.

Im folgenden Beispiel 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"
        }
      }
    ]
  }
}

Aufgabenverhalten basierend auf der Anzahl der Wiederholungen ändern

Nachdem Sie automatische Wiederholungsversuche für eine Aufgabe aktiviert haben, wie in den vorherigen Abschnitten auf dieser Seite beschrieben, können Sie optional Ihre ausführbaren Dateien so aktualisieren, dass sie die vordefinierte Umgebungsvariable BATCH_TASK_RETRY_ATTEMPT verwenden. 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 Runnables, wenn sich eine Aufgabe je nach Anzahl der Wiederholungen unterschiedlich verhalten soll. Wenn eine Aufgabe beispielsweise wiederholt wird, möchten Sie möglicherweise bestätigen, welche Befehle beim vorherigen Versuch bereits erfolgreich ausgeführt wurden. Weitere Informationen finden Sie unter Vordefinierte Umgebungsvariablen.

Nächste Schritte