Questo documento descrive come limitare i tempi di esecuzione di attività e runnables impostando i timeout. In alternativa, se vuoi che un eseguibile venga completato non appena tutti gli altri eseguibili della sua attività sono stati eseguiti, utilizza un eseguibile in background invece.
Un timeout specifica la quantità di tempo consentita per l'esecuzione di un'attività o di un eseguibile. Batch non consente l'esecuzione di job per più di 14 giorni e non imposta timeout predefiniti per singole attività ed eseguibili. Di conseguenza, un singolo task o eseguibile può essere eseguito per un massimo di 14 giorni prima dell'errore automatico. Tuttavia, se le tue attività e i tuoi eseguibili non sono destinati a essere eseguiti per così tanto tempo, questa configurazione potrebbe causare costi e ritardi imprevisti. Per evitare tempi di esecuzione eccessivi, puoi impostare timeout per attività e eseguibili.
Prima di iniziare
- Se non hai mai utilizzato Batch, consulta la sezione Guida introduttiva a 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:
-
Batch Job Editor (
roles/batch.jobsEditor
) sul progetto -
Utente service account (
roles/iam.serviceAccountUser
) sul service account del job, che per impostazione predefinita è il service account Compute Engine predefinito
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.
-
Batch Job Editor (
Impostare timeout
Puoi impostare timeout per runnable, attività o entrambi. Il timeout per un runnable specifica il tempo di esecuzione massimo per quel runnable. Il timeout per un'attività specifica il tempo di esecuzione massimo per l'attività, che è la somma di tutti i singoli tempi di esecuzione dei relativi elementi eseguibili. Ad esempio, se un'attività ha tre eseguibili che vengono eseguiti contemporaneamente per 1 minuto, il tempo di esecuzione dell'attività è di 3 minuti, non di 1 minuto.
Se imposti timeout sovrapposti, ad esempio un timeout sia per un eseguibile sia per l'attività dell'eseguibile, è necessario superare un solo timeout per attivare l'errore automatico. Ad esempio, supponiamo di impostare il timeout di un'attività su 60 secondi e il timeout di ciascun eseguibile dell'attività su 120 secondi. Quindi, questo esempio di attività e tutti i relativi eseguibili non vanno a buon fine quando la somma dei tempi di esecuzione degli eseguibili supera i 60 secondi ed è impossibile attivare i timeout di 120 secondi.
Per scegliere il timeout appropriato da impostare per le attività e i runnable del job, analizza i log di job simili eseguiti in precedenza per determinare il tempo di esecuzione tipico delle attività e dei runnable per carichi di lavoro simili.
Impostare il timeout per un'attività
Utilizza Google Cloud CLI o l'API REST per
creare un job che
includa il
campo maxRunDuration
nell'oggetto taskSpec
del file JSON:
{
"taskGroups": [
{
"taskSpec": {
...
"maxRunDuration": "TIMEOUT"
}
}
]
}
Sostituisci TIMEOUT
con il numero massimo di secondi o
sezioni frazionarie per cui vuoi consentire l'esecuzione dell'attività. Ad esempio, 255s
.
Un job che imposta un timeout di 255 secondi per un'attività avrebbe un file di configurazione JSON simile al seguente:
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
}
}
],
"maxRunDuration": "255s"
},
"taskCount": 3
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
Se il timeout per un'attività viene superato, l'attività non viene eseguita automaticamente e
il timeout superato è indicato dal codice di uscita 50005
negli eventi di stato e nei log del job. Per saperne di più sui timeout superati, consulta la
documentazione per la risoluzione dei problemi relativa al codice di uscita 50005.
Imposta il timeout per un eseguibile
Utilizza Google Cloud CLI o l'API REST per
creare un job che
includa il
campo timeout
nell'oggetto runnable
del file JSON:
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
...
"timeout": "TIMEOUT"
}
]
}
}
]
}
Sostituisci TIMEOUT
con il numero massimo di secondi o
sezioni frazionarie per cui vuoi consentire l'esecuzione del runnable. Ad esempio,
3.5s
.
Un job che imposta un timeout di 3,5 secondi per un eseguibile avrebbe un file di configurazione JSON simile al seguente:
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world! This is task ${BATCH_TASK_INDEX}. This job has a total of ${BATCH_TASK_COUNT} tasks."
},
"timeout": "3.5s"
}
]
},
"taskCount": 3
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
Se il timeout per un eseguibile viene superato, l'eseguibile non va a buon fine automaticamente e
il timeout superato è indicato dal codice di uscita 50005
negli eventi di stato e nei log del job. Per saperne di più sui timeout superati, consulta la
documentazione per la risoluzione dei problemi relativa al codice di uscita 50005.
Passaggi successivi
- Se hai problemi a creare o eseguire un job, consulta la sezione Risoluzione dei problemi.
- Visualizzare lavori e attività.
- Scopri di più sulle opzioni di creazione dei job.
- Scopri come analizzare un job utilizzando i log.