Cette page explique comment relancer automatiquement des tâches après ou des défaillances.
Un job par lot échoue lorsqu'au moins une de ses tâches échoue, ce qui peut se produisent pour diverses raisons. Par défaut, chaque tâche d'un job ne s'exécute qu'une seule fois. si une tâche échoue, elle n'est pas relancée. Cependant, certains problèmes amenant une tâche à échouer peut être facilement résolu simplement en renouvelant la tâche. Dans ces cas, configurer le job de façon à relancer automatiquement les tâches peut considérablement réduire la difficulté à résoudre les problèmes et la durée d'exécution globale de vos jobs.
Les nouvelles tentatives automatiques sont adaptées tâches faiblement couplées (indépendantes) ; et peut vous aider à résoudre différents problèmes. Par exemple, de nouvelles tentatives automatiques de tâches peut résoudre les problèmes urgents, tels que les suivants:
- la préemption des VM Spot
- Événements de maintenance de VM et erreurs d'hôte
- erreurs réseau temporaires
Vous pouvez configurer des tentatives automatiques pour chaque tâche lorsque vous créez un job. Plus précisément, pour chaque tâche, vous pouvez utiliser l'une des méthodes suivantes : de configuration:
- Par défaut, chaque tâche n'est pas relancée en cas d'échec.
- Relancer les tâches pour tous les échecs: vous pouvez configurer le nombre maximal de tentatives automatiques des tâches ayant échoué. Toi vous pouvez spécifier entre 0 (valeur par défaut) et 10 tentatives.
- Relancer des tâches en cas d'échec: Vous pouvez configurer différentes tâches (nouvelle tentative automatique ou échec sans nouvelle tentative) par des défaillances spécifiques. L'action inverse est appliquée pour toutes les défaillances non spécifiées. Les échecs spécifiques peuvent être identifiés par un code de sortie défini par votre application ou Batch.
Avant de commencer
- Si vous n'avez jamais utilisé Batch auparavant, consultez Premiers pas avec Batch et activez Batch en suivant la les conditions préalables pour les projets et les utilisateurs.
-
Pour obtenir les autorisations nécessaires à la création d'un job, demandez à votre administrateur de vous accorder le rôles IAM suivants:
-
Éditeur de jobs par lot (
roles/batch.jobsEditor
) sur le projet -
Utilisateur du compte de service (
roles/iam.serviceAccountUser
) sur le compte de service du job, qui est par défaut le compte de service Compute Engine par défaut
Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.
Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.
-
Éditeur de jobs par lot (
Relancer les tâches pour tous les échecs
Vous pouvez définir
nombre maximal de tentatives automatiques (champ maxRetryCount
)
pour les tâches ayant échoué à l'aide de gcloud CLI ou de l'API Batch.
gcloud
Créez un fichier JSON qui spécifie les détails de configuration du job et la classe
maxRetryCount
.Par exemple, pour créer un job de script de base qui spécifie le nombre maximal de nouvelles tentatives pour les tâches ayant échoué, créez un fichier JSON avec le contenu suivant:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}" } } ], "maxRetryCount": MAX_RETRY_COUNT }, "taskCount": 3 } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }
Remplacer
MAX_RETRY_COUNT
par le nombre maximal de nouvelles tentatives pour chaque tâche. Pour qu'un job puisse relancer les tâches ayant échoué, cette valeur doit être un entier compris entre1
et10
. Si le champmaxRetryCount
n'est pas spécifié, la valeur par défaut est0
, ce qui signifie de ne pas relancer de tâches.Pour créer et exécuter le job, utilisez la Commande
gcloud batch jobs submit
:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Remplacez les éléments suivants :
JOB_NAME
: nom de la tâche.LOCATION
: emplacement du travail.JSON_CONFIGURATION_FILE
: chemin d'accès d'un fichier JSON contenant les détails de configuration du job.
API
Envoyez une requête POST
à
Méthode jobs.create
spécifiant le champ maxRetryCount
.
Par exemple, pour créer un job de script de base qui spécifie le nombre maximal pour les tâches ayant échoué, exécutez la requête suivante:
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"
}
}
Remplacez les éléments suivants :
PROJECT_ID
: le ID du projet de votre projet.LOCATION
: emplacement du travail.JOB_NAME
: nom de la tâche.MAX_RETRY_COUNT
: nombre maximal de nouvelles tentatives pour chaque tâche. Pour qu'un job puisse relancer les tâches ayant échoué, cette valeur doit être un entier compris entre1
et10
. Si le champmaxRetryCount
n'est pas spécifié, la valeur par défaut est0
, ce qui signifie de ne pas relancer de tâches.
Relancer des tâches en cas d'échec
Vous pouvez définir la manière dont une tâche doit gérer différentes échecs de tâches en utilisant
Règles relatives au cycle de vie (champ lifecyclePolicies[]
).
Une stratégie de cycle de vie se compose
action (champ action
),
condition d'action (champ actionCondition
),
et le code de sortie (champ exitCodes[]
).
L'action spécifiée est exécutée chaque fois que
une condition d'action (code de sortie spécifique) se produit.
Vous pouvez spécifier l'une des actions suivantes:
RETRY_TASK
: relancer les tâches qui échouent avec les codes de sortie spécifiés dans le paramètreexitCodes[]
. Les tâches qui échouent avec un code de sortie non spécifié sont pas de nouvelle tentative.FAIL_TASK
: ne relancez pas les tâches qui échouent avec les codes de sortie spécifiés dans le paramètreexitCodes[]
. Les tâches qui échouent avec un code de sortie non spécifié sont nouvelle tentative.
En particulier, toutes les tâches qui échouent avec des codes de sortie non spécifiés prennent le
action opposée : certains codes de sortie font l'objet de nouvelles tentatives, tandis que d'autres échouent.
Par conséquent, pour que la stratégie de cycle de vie fonctionne comme prévu,
vous devez également définir
nombre maximal de tentatives automatiques (champ maxRetryCount
)
pour permettre au job de relancer automatiquement les tâches ayant échoué au moins une fois.
Chaque code de sortie représente un échec spécifique défini par votre application ou Batch. Les codes de sortie de 50001 à 59999 sont réservés et définis par par lot. Pour en savoir plus sur les codes de sortie réservés, consultez Dépannage
Vous pouvez spécifier qu'un job doit réessayer ou faire échouer les tâches après des échecs spécifiques à l'aide de gcloud CLI ou de l'API Batch.
gcloud
Créez un fichier JSON qui spécifie les détails de configuration du job, le
maxRetryCount
et les sous-champslifecyclePolicies[]
.Pour créer une tâche de script de base qui ne relance les tâches ayant échoué que pour et quelques codes de sortie, créez un fichier JSON avec le contenu suivant:
{ "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" } }
Remplacez les éléments suivants :
MAX_RETRY_COUNT
: nombre maximal de nouvelles tentatives pour chaque tâche. Pour qu'un job puisse relancer les tâches ayant échoué, cette valeur doit être un entier compris entre1
et10
. Si le champmaxRetryCount
n'est pas spécifié, la valeur par défaut est0
, ce qui signifie de ne pas relancer de tâches.ACTION
: action, soitRETRY_TASK
ouFAIL_TASK
, que vous souhaitez pour les tâches qui échouent les codes de sortie spécifiés. Tâches qui échouent avec une sortie non spécifiée les codes effectuent l'autre action.EXIT_CODES
: liste de valeurs séparées par une virgule un ou plusieurs codes de sortie qui doivent déclencher l'événement l'action, par exemple,50001, 50002
.Chaque code de sortie peut être défini par l'application par lot. Codes de sortie entre
50001
et59999
sont réservées par Batch. Pour en savoir plus sur les codes de sortie réservés, consultez Dépannage
Par exemple, le job suivant ne relance que les tâches ayant échoué en raison à la préemption des VM Spot.
{ "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" } } ] } }
Pour créer et exécuter le job, utilisez la Commande
gcloud batch jobs submit
:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Remplacez les éléments suivants :
JOB_NAME
: nom de la tâche.LOCATION
: emplacement du travail.JSON_CONFIGURATION_FILE
: chemin d'accès d'un fichier JSON contenant les détails de configuration du job.
API
Envoyez une requête POST
à
Méthode jobs.create
qui spécifie le champ maxRetryCount
et les sous-champs lifecyclePolicies[]
.
Pour créer une tâche de script de base qui ne relance les tâches ayant échoué que pour des codes de sortie, exécutez la requête suivante:
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"
}
}
Remplacez les éléments suivants :
PROJECT_ID
: le ID du projet de votre projet.LOCATION
: emplacement du travail.JOB_NAME
: nom de la tâche.MAX_RETRY_COUNT
: nombre maximal de nouvelles tentatives pour chaque tâche. Pour qu'un job puisse relancer les tâches ayant échoué, cette valeur doit être un entier compris entre1
et10
. Si le champmaxRetryCount
n'est pas spécifié, la valeur par défaut est0
, ce qui signifie de ne pas relancer de tâches.ACTION
: action, soitRETRY_TASK
ouFAIL_TASK
, que vous souhaitez pour les tâches qui échouent les codes de sortie spécifiés. Tâches qui échouent avec une sortie non spécifiée les codes effectuent l'autre action.EXIT_CODES
: liste de valeurs séparées par une virgule un ou plusieurs codes de sortie qui doivent déclencher l'événement l'action, par exemple,50001, 50002
.Chaque code de sortie peut être défini par l'application par lot. Codes de sortie entre
50001
et59999
sont réservées par Batch. Pour en savoir plus sur les codes de sortie réservés, consultez Dépannage
Par exemple, le job suivant ne relance que les tâches ayant échoué en raison à la préemption des VM Spot.
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"
}
}
]
}
}
Modifier le comportement des tâches en fonction du nombre de tentatives
Éventuellement, après avoir activé les nouvelles tentatives automatiques pour une tâche
comme décrit dans les sections précédentes de cette page, vous pouvez
mettez à jour vos exécutables afin d'utiliser
Variable d'environnement prédéfinie BATCH_TASK_RETRY_ATTEMPT
.
La variable BATCH_TASK_RETRY_ATTEMPT
décrit le nombre de fois
que cette tâche a déjà été tentée. Utilisez le
la variable BATCH_TASK_RETRY_ATTEMPT
dans vos exécutables si vous souhaitez
pour qu'une tâche se comporte différemment
selon le nombre de tentatives.
Par exemple, lorsqu'une tâche est en cours de nouvelle tentative, vous pouvez
confirmer quelles commandes ont
déjà été exécutées avec succès dans
la précédente tentative. Pour en savoir plus, consultez
Variables d'environnement prédéfinies.
Étape suivante
- Si vous rencontrez des problèmes lors de la création ou de l'exécution d'un job, consultez la section Dépannage.
- Afficher les missions et les tâches
- En savoir plus sur les options de création de tâches