Questo documento descrive come limitare i tempi di esecuzione di attività e eseguibili impostando i timeout.
Un timeout specifica la quantità di tempo in cui un'attività o un'attività eseguibile è consentito eseguire. Batch non consente l'esecuzione dei job per più di 14 giorni e non imposta i timeout predefiniti per le singole attività e gli elementi eseguiti. Di conseguenza, una singola attività o eseguibile può essere eseguita per tutto il tempo 14 giorni prima dell'errore automatico. Se però le tue attività e gli elementi eseguibili non sono destinata a essere eseguita per così tanto tempo, questa configurazione potrebbe causare costi imprevisti e ritardi. Per evitare tempi di esecuzione eccessivi, puoi impostare timeout per le attività e runnables.
Prima di iniziare
- Se non hai mai utilizzato Batch, rivedi Inizia a utilizzare Batch e abilita Batch, completando prerequisiti per progetti e utenti.
-
Per ottenere le autorizzazioni necessarie per creare un job, chiedi all'amministratore di concederti seguenti ruoli IAM:
-
Batch Job Editor (
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 a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite la ruoli o altri ruoli predefiniti ruoli.
-
Batch Job Editor (
Impostare i timeout
Puoi impostare timeout per gli elementi eseguibili, le attività o entrambi. Il timeout per un programma eseguibile specifica il tempo di esecuzione massimo per quel programma eseguibile. Il timeout per un'attività specifica il tempo di esecuzione massimo per quell'attività, che è la somma di tutti i singoli tempi di esecuzione dei suoi elementi eseguibili. Ad esempio, se un'attività ha 3 eseguibili che vengono eseguiti tutti 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, è sufficiente superare un solo timeout per attivare il fallimento automatico. Ad esempio, supponi di impostare il timeout di un'attività su 60 secondi e il timeout di ciascuno degli elementi eseguibili dell'attività 120 secondi. Poi, questo task di esempio e tutti i relativi eseguibili non vanno a buon fine quando la somma dei tempi di esecuzione dei relativi eseguibili supera i 60 secondi ed è impossibile attivare i timeout di 120 secondi.
Per scegliere il timeout appropriato da impostare per le attività e gli elementi eseguibili del job, analizzare i log di job simili che già eseguiti per determinare il tempo di esecuzione tipico delle attività eseguibili per carichi di lavoro simili.
Impostare il timeout per un'attività
Utilizza Google Cloud CLI o l'API REST per
creare un job che
include
Campo maxRunDuration
nell'oggetto taskSpec
del file JSON:
{
"taskGroups": [
{
"taskSpec": {
...
"maxRunDuration": "TIMEOUT"
}
}
]
}
Sostituisci TIMEOUT
con il numero massimo di secondi oppure
sezioni frazionarie a cui vuoi consentire l'esecuzione dell'attività. Ad esempio, 255s
.
Un job che imposta un timeout di 255 secondi per un'attività avrebbe una 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 va a buon fine automaticamente e il timeout superato è indicato dal codice di uscita 50005
negli eventi e nei log dello stato del job. Per ulteriori informazioni sui timeout superati, consulta
documentazione per la risoluzione dei problemi relativi al codice di uscita 50005.
Impostare il timeout per un eseguibile
Utilizza Google Cloud CLI o l'API REST per
creare un job che
include
Campo timeout
nell'oggetto runnable
del file JSON:
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
...
"timeout": "TIMEOUT"
}
]
}
}
]
}
Sostituisci TIMEOUT
con il numero massimo di secondi o sezioni frazionate per cui vuoi consentire l'esecuzione del file eseguibile. Ad esempio:
3.5s
.
Un job che imposta un timeout di 3,5 secondi per un eseguibile avrà 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 e nei log dello stato del job. Per ulteriori informazioni sui timeout superati, consulta la documentazione per la risoluzione dei problemi relativi al codice di uscita 50005.
Passaggi successivi
- Se hai problemi a creare o eseguire un job, consulta la sezione Risoluzione dei problemi.
- Visualizza lavori e attività.
- Scopri di più sulle opzioni di creazione dei job.
- Scopri come analizzare un job utilizzando i log.