Cette page explique comment réessayer automatiquement les tâches après tous les échecs ou certains d'entre eux.
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. Toutefois, certains problèmes qui entraînent l'échec d'une tâche peuvent être facilement résolus en la réessayant. 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 aux tâches faiblement couplées (indépendantes) et peuvent aider à résoudre divers problèmes. Par exemple, les nouvelles tentatives de tâches automatiques peuvent résoudre des problèmes urgents, comme les suivants :
- préemption des VM Spot ;
- Événements de maintenance de la VM et erreurs de l'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 lorsqu'elle échoue.
- Réessayer les tâches en cas d'échec : vous pouvez configurer le nombre maximal de nouvelles tentatives pour les tâches ayant échoué. Vous pouvez spécifier entre 0 (par défaut) et 10 nouvelles tentatives.
- Réessayer les tâches en cas d'échec : vous pouvez configurer différentes actions de tâche (réessayer automatiquement ou échouer sans nouvelle tentative) pour des échecs spécifiques. L'action inverse est effectuée pour tous les échecs non spécifiés. 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, consultez Premiers pas avec Batch et activez Batch en remplissant 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 de la tâche, 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 page Gérer l'accès aux projets, aux dossiers et aux organisations.
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 le nombre maximal de tentatives automatiques (champ maxRetryCount
) pour les tâches échouées d'une tâche à l'aide de la CLI gcloud ou de l'API Batch.
gcloud
Créez un fichier JSON qui spécifie les détails de configuration de la tâche et le champ
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" } }
Remplacez
MAX_RETRY_COUNT
par le nombre maximal de 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
: ID de 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'une tâche puisse relancer des tâches ayant échoué, cette valeur doit être définie sur un entier compris entre1
et10
. Si le champmaxRetryCount
n'est pas spécifié, la valeur par défaut est0
, ce qui signifie qu'aucune tâche ne doit être réessayée.
Réessayer d'effectuer 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 d'un
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
: réessayez les tâches qui échouent avec les codes de sortie spécifiés dans le champexitCodes[]
. Les tâches qui échouent avec un code de sortie non spécifié sont pas de nouvelle tentative.FAIL_TASK
: ne pas réessayer les tâches qui échouent avec les codes de sortie spécifiés dans le champexitCodes[]
. Les tâches qui échouent avec un code de sortie non spécifié sont nouvelle tentative.
Plus précisément, toutes les tâches qui échouent avec des codes de sortie non spécifiés effectuent l'action opposée : certains codes de sortie sont réessayés et 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 par 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'une tâche doit être réessayée ou échouer après des échecs spécifiques à l'aide de la CLI gcloud 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 réessaie les tâches échouées uniquement pour certains codes de sortie, créez un fichier JSON contenant les éléments suivants :
{ "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'une tâche puisse relancer des tâches ayant échoué, cette valeur doit être définie sur 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 (RETRY_TASK
ouFAIL_TASK
) que vous souhaitez effectuer pour les tâches qui échouent avec 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 d'un ou de plusieurs codes de sortie séparés par une virgule pour lesquels vous souhaitez déclencher l'action spécifiée (par exemple,50001, 50002
).Chaque code de sortie peut être défini par l'application par lot. Les codes de sortie de
50001
à59999
sont réservés 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 de la tâche.JSON_CONFIGURATION_FILE
: chemin d'accès à un fichier JSON contenant les détails de configuration de la tâche.
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 relance les tâches ayant échoué uniquement pour certains codes de sortie, effectuez 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'une tâche puisse relancer des tâches ayant échoué, cette valeur doit être définie sur un entier compris entre1
et10
. Si le champmaxRetryCount
n'est pas spécifié, la valeur par défaut est0
, ce qui signifie qu'aucune tâche ne doit être réessayée.ACTION
: action (RETRY_TASK
ouFAIL_TASK
) que vous souhaitez effectuer pour les tâches qui échouent avec 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 d'un ou de plusieurs codes de sortie séparés par une virgule pour lesquels vous souhaitez déclencher l'action spécifiée (par exemple,50001, 50002
).Chaque code de sortie peut être défini par l'application par lot. Les codes de sortie de
50001
à59999
sont réservés 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 les
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 la section 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 jobs et les tâches
- Découvrez d'autres options de création de tâches.