Questa pagina descrive come riprovare automaticamente le attività dopo tutti o alcuni errori.
Un job batch non va a buon fine quando almeno una delle sue attività non va a buon fine, il che può verificarsi per vari motivi. Per impostazione predefinita, ogni attività in un job viene eseguita una sola volta. Se un'attività non riesce, non viene ritentata. Tuttavia, alcuni problemi che causano il mancato esito di un'attività possono essere facilmente risolti semplicemente riprovando l'attività. In questi casi, la configurazione del job in modo che ripeta automaticamente le attività può notevolmente contribuire a ridurre le difficoltà di risoluzione dei problemi e il tempo di esecuzione complessivo dei job.
I nuovi tentativi automatici sono particolarmente adatti per 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 quali:
- prerilascio delle VM spot
- Eventi di manutenzione delle VM ed errori dell'host
- errori di rete temporanei
Puoi configurare i nuovi tentativi automatici per ciascuna 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 ritentata quando non riesce.
- Ripetere le attività per tutti gli errori: puoi configurare il numero massimo di volte per cui riprovare automaticamente le attività non riuscite. Puoi specificare un numero di tentativi compreso tra 0 (impostazione predefinita) e 10.
- Ripetere le attività per alcuni errori: puoi configurare diverse azioni delle attività, che possono essere nuovi tentativi automatici o non riusciti senza nuovi tentativi, per errori specifici. Per tutti gli errori non specificati viene eseguita l'azione opposta. Gli errori specifici possono essere identificati da un codice di uscita definito dalla tua applicazione o dal tuo batch.
Prima di iniziare
- Se non hai mai utilizzato Batch, consulta Inizia a utilizzare Batch e abilita 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 job batch (
roles/batch.jobsEditor
) nel progetto -
Utente account di servizio (
roles/iam.serviceAccountUser
) sull'account di servizio del job, che per impostazione predefinita è l'account di servizio Compute Engine predefinito
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
-
Editor job batch (
Riprova le attività per tutti gli errori
Puoi definire il numero massimo di nuovi tentativi automatici (campo maxRetryCount
) per le attività non riuscite di un job utilizzando 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 il seguente contenuto:
{ "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_COUNT
con 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 tra1
e10
. Se il campomaxRetryCount
non è specificato, il valore predefinito è0
, il che significa che non è necessario riprovare alcuna attività.Per creare ed eseguire il job, utilizza il comando
gcloud batch jobs submit
:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Sostituisci 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
Effettua una richiesta POST
al
metodo jobs.create
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, effettua la richiesta seguente:
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 tra1
e10
. Se il campomaxRetryCount
non è specificato, il valore predefinito è0
, il che significa che non è necessario riprovare alcuna attività.
Riprova le attività per alcuni errori
Puoi definire in che modo un job deve gestire i diversi errori delle attività utilizzando i criteri di ciclo di vita (campo lifecyclePolicies[]
).
Un criterio del ciclo di vita è costituito da un'azione (campo action
), una condizione di azione (campo actionCondition
) e un codice di uscita (campo exitCodes[]
).
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à non riuscite con i codici di uscita specificati nel campoexitCodes[]
. Le attività che hanno esito negativo con codici di uscita non specificati non vengono ritentate.FAIL_TASK
: non riprovare le attività non riuscite con i codici di uscita specificati nel campoexitCodes[]
. Le attività che hanno esito negativo con codici di uscita non specificati vengono ritentate.
In particolare, tutte le attività che non hanno esito positivo con codici di uscita non specificati eseguono l'azione opposta: alcuni codici di uscita vengono tentati di nuovo, mentre altri non sono riusciti.
Di conseguenza, affinché il criterio del ciclo di vita funzioni come previsto,
devi anche definire il
numero massimo di nuovi tentativi automatici (campo maxRetryCount
)
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 dal batch. I codici di uscita da 50001 a 59999 sono riservati e definiti da Batch. Per ulteriori informazioni sui codici di uscita prenotati, consulta Risoluzione dei problemi.
Puoi specificare se un job deve riprovare o meno le attività in seguito a errori specifici utilizzando gcloud CLI o l'API Batch.
gcloud
Crea un file JSON che specifichi i dettagli di configurazione del job, il campo
maxRetryCount
e i sottocampilifecyclePolicies[]
.Per creare un job di script di base che ripeta le attività non riuscite solo per alcuni codici di uscita, crea un file JSON con il seguente contenuto:
{ "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 tra1
e10
. Se il campomaxRetryCount
non è specificato, il valore predefinito è0
, il che significa che non è necessario riprovare alcuna attività.ACTION
: l'azione (RETRY_TASK
oFAIL_TASK
) che vuoi per le attività che non hanno esito positivo con i codici di uscita specificati. Le attività non riuscite 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 dalla tua applicazione o in batch. I codici di uscita da
50001
a59999
sono riservati da Batch. Per ulteriori informazioni sui codici di uscita prenotati, consulta Risoluzione dei problemi.
Ad esempio, il seguente job ritenta solo le attività non riuscite 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 comando
gcloud batch jobs submit
:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Sostituisci 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
Effettua una richiesta POST
al
metodo jobs.create
che specifica il campo maxRetryCount
e i sottocampi lifecyclePolicies[]
.
Per creare un job di script di base che ripeta le attività non riuscite solo per alcuni codici di uscita, effettua la richiesta seguente:
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 tra1
e10
. Se il campomaxRetryCount
non è specificato, il valore predefinito è0
, il che significa che non è necessario riprovare alcuna attività.ACTION
: l'azione (RETRY_TASK
oFAIL_TASK
) che vuoi per le attività che non hanno esito positivo con i codici di uscita specificati. Le attività non riuscite 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 dalla tua applicazione o in batch. I codici di uscita da
50001
a59999
sono riservati da Batch. Per ulteriori informazioni sui codici di uscita prenotati, consulta Risoluzione dei problemi.
Ad esempio, il seguente job ritenta solo le attività non riuscite 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"
}
}
]
}
}
Modifica il comportamento dell'attività in base al numero di nuovi tentativi
Facoltativamente, dopo aver abilitato i nuovi tentativi automatici per un'attività come descritto nelle sezioni precedenti di questa pagina, puoi aggiornare gli elementi eseguibili in modo da utilizzare la variabile di ambiente predefinita BATCH_TASK_RETRY_ATTEMPT
.
La variabile BATCH_TASK_RETRY_ATTEMPT
descrive il numero di volte
in cui questa attività è già stata tentata. Utilizza la variabile BATCH_TASK_RETRY_ATTEMPT
negli elementi eseguibili se vuoi che un'attività si comporti in modo diverso in base al numero di nuovi tentativi.
Ad esempio, quando si prova a ripetere un'attività, potresti voler
confermare quali comandi sono già stati eseguiti correttamente
nel tentativo precedente. Per maggiori informazioni, consulta
Variabili di ambiente predefinite.
Passaggi successivi
- Se hai problemi durante la creazione o l'esecuzione di un job, consulta la sezione Risoluzione dei problemi.
- Visualizza lavori e attività.
- Scopri di più sulle opzioni per la creazione di offerte di lavoro.