Aufgabenwiederholungen automatisieren

Auf dieser Seite wird beschrieben, wie Sie Aufgaben automatisch wiederholen können, oder Fehler auftreten.

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 dazu führen, kann durch wiederholtes Wiederholen der Aufgabe einfach behoben werden. In diesen Fällen Wenn Sie den Job so konfigurieren, dass Aufgaben automatisch wiederholt werden, kann dies erheblich dazu beitragen, Fehlerbehebung und die Gesamtlaufzeit Ihrer Jobs.

Automatische Wiederholungsversuche eignen sich gut für Lose verknüpfte (unabhängige) Aufgaben und kann bei vielen Problemen helfen. Zum Beispiel automatische Aufgabenwiederholungen zeitkritische Probleme wie die folgenden beheben können:

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

  • 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. Ich kann einen Wert zwischen 0 (Standardeinstellung) und 10 Wiederholungen 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. Spezifische Fehler können jeweils durch einen Exit-Code identifiziert werden, der Anwendung oder Batch definiert wurde.

Hinweise

Aufgaben für alle Fehler wiederholen

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

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: Pfad für ein JSON-Objekt mit den Konfigurationsdetails des Jobs.

API

Stellen Sie eine POST-Anfrage an den Methode jobs.create der das Feld maxRetryCount angibt.

Um beispielsweise einen einfachen Skriptjob zu erstellen, in dem das maximale für fehlgeschlagene Aufgaben zu versuchen, 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: 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, 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.

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 nicht angegebenen Exit-Codes fehlschlagen, sind nicht erneut versucht.
  • FAIL_TASK: Es werden keine Aufgaben wiederholt, die mit den angegebenen Exit-Codes im exitCodes[]. 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 spezifischen Fehler, der entweder aus Ihrer Anwendung oder Batch. 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[].

    So erstellen Sie einen einfachen Skriptjob, der fehlgeschlagene Aufgaben nur für Exit-Codes eingerichtet haben, 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 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 von einen oder mehrere Exit-Codes, die den angegebenen Aktion, z. B. 50001, 50002.

      Jeder Exit-Code kann von Ihrer Anwendung oder Batch. 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: Pfad für ein JSON-Objekt mit den Konfigurationsdetails des Jobs.

API

Stellen Sie eine POST-Anfrage an den Methode jobs.create gibt das Feld maxRetryCount und die Unterfelder lifecyclePolicies[] an.

So erstellen Sie einen einfachen Skriptjob, der fehlgeschlagene Aufgaben nur für einige Exit-Codes 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,
        "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 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 von einen oder mehrere Exit-Codes, die den angegebenen Aktion, z. B. 50001, 50002.

    Jeder Exit-Code kann von Ihrer Anwendung oder Batch. 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.

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 BATCH_TASK_RETRY_ATTEMPT vordefinierte Umgebungsvariable. Die Variable BATCH_TASK_RETRY_ATTEMPT beschreibt, wie oft dass 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 z. B. eine Aufgabe wiederholt wird, möchten Sie vielleicht um zu erfahren, welche Befehle bereits in aus dem vorherigen Versuch. Weitere Informationen finden Sie unter Vordefinierte Umgebungsvariablen:

Nächste Schritte