Wiederholungsversuche für Aufgaben automatisieren

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:

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

  1. 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.
  2. Um die Berechtigungen zu erhalten, die Sie zum Erstellen eines Jobs benötigen, bitten Sie Ihren Administrator, Ihnen folgenden IAM-Rollen:

    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 mithilfe der gcloud CLI oder Batch API finden.

gcloud

  1. 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 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 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 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 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 im exitCodes[]. Aufgaben, die mit einem nicht angegebenen Exit-Code fehlschlagen, werden nicht wiederholt.
  • FAIL_TASK: Aufgaben, die mit den im Feld exitCodes[] 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

  1. Erstellen Sie eine JSON-Datei mit den Konfigurationsdetails des Jobs, dem maxRetryCount und die Unterfelder lifecyclePolicies[].

    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 zwischen 1 und 10 festgelegt werden. Wenn das Feld maxRetryCount nicht angegeben ist, ist der Standardwert 0. Das bedeutet, dass keine Aufgaben noch einmal ausgeführt werden.

    • ACTION: die Aktion, entweder RETRY_TASK oder FAIL_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 bis 59999 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"
            }
          }
        ]
      }
    }
    
  2. 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 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 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 bis 59999 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