Questa pagina descrive come riprovare automaticamente le attività dopo tutti o alcuni errori.
Un job Batch non riesce quando almeno una delle sue attività non riesce, il che può accadere per vari motivi. Per impostazione predefinita, ogni attività in un job viene eseguita una sola volta; se un'attività non riesce, non viene riprovata. Tuttavia, alcuni problemi che causano il mancato completamento di un'attività possono essere risolti facilmente semplicemente riprovando l'attività. In questi casi, la configurazione del job per riprovare automaticamente le attività può contribuire in modo sostanziale a ridurre le difficoltà di risoluzione dei problemi e il tempo di esecuzione complessivo dei job.
I nuovi tentativi automatici sono adatti alle attività a basso accoppiamento (indipendenti) e possono aiutare a risolvere una serie di problemi. Ad esempio, i nuovi tentativi automatici delle attività possono risolvere problemi urgenti come i seguenti:
- Prerilascio delle VM spot
- Eventi di manutenzione delle VM ed errori dell'host
- Errori di rete temporanei
Puoi configurare i nuovi tentativi automatici delle attività per ogni attività quando crei un job. In particolare, per ogni attività puoi utilizzare una delle seguenti opzioni di configurazione:
- Per impostazione predefinita, ogni attività non viene riprovata in caso di errore.
- Riprova le attività per tutti gli errori: puoi configurare il numero massimo di volte in cui riprovare automaticamente le attività non riuscite. Puoi specificare da 0 (valore predefinito) a 10 nuovi tentativi.
- Riprova le attività per alcuni errori: puoi configurare diverse azioni delle attività, ovvero il nuovo tentativo automatico o il mancato completamento senza nuovo tentativo, per errori specifici. L'azione opposta viene eseguita per tutti gli errori non specificati. Gli errori specifici possono essere identificati ciascuno da un codice di uscita definito dall'applicazione o da Batch.
Prima di iniziare
- Se non hai mai utilizzato Batch, consulta la pagina Inizia a utilizzare Batch e attiva Batch completando i prerequisiti per progetti e utenti.
-
Per ottenere le autorizzazioni necessarie per creare un job, chiedi all'amministratore di concederti i seguenti ruoli IAM:
- Editor di job batch (
roles/batch.jobsEditor) sul progetto - Utente account di servizio (
roles/iam.serviceAccountUser) sul service account del job, che per impostazione predefinita è il service account predefinito di Compute Engine
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
- Editor di job batch (
Riprova le attività per tutti gli errori
Puoi definire il
numero massimo di nuovi tentativi automatici (maxRetryCount campo)
per le attività non riuscite di un job utilizzando la gcloud CLI o l'API Batch.
gcloud
Crea un file JSON che specifichi i dettagli di configurazione del job e il campo
maxRetryCount.Ad esempio, per creare un job di script di base che specifichi il numero massimo di nuovi tentativi per le attività non riuscite, crea un file JSON con i seguenti contenuti:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}" } } ], "maxRetryCount": MAX_RETRY_COUNT }, "taskCount": 3 } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }Sostituisci
MAX_RETRY_COUNTcon il numero massimo di nuovi tentativi per ogni attività. Affinché un job possa riprovare le attività non riuscite, questo valore deve essere impostato su un numero intero compreso tra1e10. Se il campomaxRetryCountnon è specificato, il valore predefinito è0, il che significa che non vengono riprovate le attività.Per creare ed eseguire il job, utilizza il
gcloud batch jobs submitcomando:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILESostituisci quanto segue:
JOB_NAME: il nome del job.LOCATION: la località del job.JSON_CONFIGURATION_FILE: il percorso di un file JSON con i dettagli di configurazione del job.
API
Invia una richiesta POST al
jobs.create metodo
che specifica il campo maxRetryCount.
Ad esempio, per creare un job di script di base che specifichi il numero massimo di nuovi tentativi per le attività non riuscite, invia la seguente richiesta:
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"
}
}
Sostituisci quanto segue:
PROJECT_ID: l' ID progetto del tuo progetto.LOCATION: la località del job.JOB_NAME: il nome del job.MAX_RETRY_COUNT: il numero massimo di nuovi tentativi per ogni attività. Affinché un job possa riprovare le attività non riuscite, questo valore deve essere impostato su un numero intero compreso tra1e10. Se il campomaxRetryCountnon è specificato, il valore predefinito è0, il che significa che non vengono riprovate le attività.
Riprova le attività per alcuni errori
Puoi definire il modo in cui un job deve gestire i diversi errori delle attività utilizzando
i criteri del ciclo di vita (lifecyclePolicies[] campo).
Un criterio del ciclo di vita è costituito da un
azione (action campo),
condizione di azione (actionCondition campo),
e codice di uscita (exitCodes[] campo).
L'azione specificata viene eseguita ogni volta che si verifica la condizione di azione, ovvero un codice di uscita specifico.
Puoi specificare una delle seguenti azioni:
RETRY_TASK: riprova le attività che non riescono con i codici di uscita specificati nel campoexitCodes[]. Le attività che non riescono con codici di uscita non specificati non vengono riprovate.FAIL_TASK: non riprovare le attività che non riescono con i codici di uscita specificati nel campoexitCodes[]. Le attività che non riescono con codici di uscita non specificati vengono riprovate.
In particolare, le attività che non riescono con codici di uscita non specificati eseguono l'azione opposta: alcuni codici di uscita vengono riprovati e altri non riescono.
Di conseguenza, affinché il criterio del ciclo di vita funzioni come previsto,
devi anche definire il
numero massimo di nuovi tentativi automatici (maxRetryCount campo)
per consentire al job di riprovare automaticamente le attività non riuscite almeno una volta.
Ogni codice di uscita rappresenta un errore specifico definito dall'applicazione o da Batch. I codici di uscita da 50001 a 59999 sono riservati e definiti da Batch. Per saperne di più sui codici di uscita riservati, consulta Risoluzione dei problemi.
Puoi specificare che un job riprovi o non riesca le attività dopo errori specifici utilizzando gcloud CLI o l'API Batch.
gcloud
Crea un file JSON che specifichi i dettagli di configurazione del job, il campo
maxRetryCounte i sottocampilifecyclePolicies[].Per creare un job di script di base che riprovi le attività non riuscite solo per alcuni codici di uscita, crea un file JSON con i seguenti contenuti:
{ "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" } }Sostituisci quanto segue:
MAX_RETRY_COUNT: il numero massimo di nuovi tentativi per ogni attività. Affinché un job possa riprovare le attività non riuscite, questo valore deve essere impostato su un numero intero compreso tra1e10. Se il campomaxRetryCountnon è specificato, il valore predefinito è0, il che significa che non vengono riprovate le attività.ACTION: l'azione,RETRY_TASKoFAIL_TASK, che vuoi eseguire per le attività che non riescono con i codici di uscita specificati. Le attività che non riescono con codici di uscita non specificati eseguono l'altra azione.EXIT_CODES: un elenco separato da virgole di uno o più codici di uscita che vuoi attivare l'azione specificata, ad esempio50001, 50002.Ogni codice di uscita può essere definito dall'applicazione o da Batch. I codici di uscita da
50001a59999sono riservati da Batch. Per saperne di più sui codici di uscita riservati, consulta Risoluzione dei problemi.
Ad esempio, il seguente job riprova solo le attività che non riescono a causa del prerilascio delle 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" } } ] } }Per creare ed eseguire il job, utilizza il
gcloud batch jobs submitcomando:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILESostituisci quanto segue:
JOB_NAME: il nome del job.LOCATION: la località del job.JSON_CONFIGURATION_FILE: il percorso di un file JSON con i dettagli di configurazione del job.
API
Invia una POST richiesta al
jobs.create metodo
che specifica il campo maxRetryCount e i sottocampi lifecyclePolicies[].
Per creare un job di script di base che riprovi le attività non riuscite solo per alcuni codici di uscita, invia la seguente richiesta:
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"
}
}
Sostituisci quanto segue:
PROJECT_ID: l' ID progetto del tuo progetto.LOCATION: la località del job.JOB_NAME: il nome del job.MAX_RETRY_COUNT: il numero massimo di nuovi tentativi per ogni attività. Affinché un job possa riprovare le attività non riuscite, questo valore deve essere impostato su un numero intero compreso tra1e10. Se il campomaxRetryCountnon è specificato, il valore predefinito è0, il che significa che non vengono riprovate le attività.ACTION: l'azione,RETRY_TASKoFAIL_TASK, che vuoi eseguire per le attività che non riescono con i codici di uscita specificati. Le attività che non riescono con codici di uscita non specificati eseguono l'altra azione.EXIT_CODES: un elenco separato da virgole di uno o più codici di uscita che vuoi attivare l'azione specificata, ad esempio50001, 50002.Ogni codice di uscita può essere definito dall'applicazione o da Batch. I codici di uscita da
50001a59999sono riservati da Batch. Per saperne di più sui codici di uscita riservati, consulta Risoluzione dei problemi.
Ad esempio, il seguente job riprova solo le attività che non riescono a causa del prerilascio delle 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"
}
}
]
}
}
Modificare il comportamento delle attività in base al numero di nuovi tentativi
Facoltativamente, dopo aver attivato i nuovi tentativi automatici per un'attività come descritto nelle sezioni precedenti di questa pagina, puoi aggiornare i file eseguibili in modo che utilizzino la variabile di ambiente predefinita BATCH_TASK_RETRY_ATTEMPT.
La variabile BATCH_TASK_RETRY_ATTEMPT descrive il numero di volte in cui è già stata tentata questa attività. Utilizza la variabile BATCH_TASK_RETRY_ATTEMPT nei file eseguibili se vuoi che un'attività si comporti in modo diverso in base al numero di nuovi tentativi.
Ad esempio, quando viene riprovata un'attività, potresti voler verificare quali comandi sono già stati eseguiti correttamente nel tentativo precedente. Per saperne di più, consulta
Variabili di ambiente predefinite.
Passaggi successivi
- Se hai problemi a creare o eseguire un job, consulta Risoluzione dei problemi.
- Visualizza job e attività.
- Scopri di più sulle opzioni di creazione dei job.