Limita i tempi di esecuzione di attività e eseguibili utilizzando i timeout

Questo documento descrive come limitare i tempi di esecuzione di attività e eseguibili impostando i timeout. In alternativa, se vuoi che un eseguibile venga completato non appena tutti gli altri eseguibili della relativa attività sono stati eseguiti, utilizza un eseguibile in background.

Un timeout specifica il tempo di esecuzione consentito per un'attività o un eseguibile. 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 un comando eseguibile può essere eseguito per un massimo di 14 giorni prima del fallimento automatico. Tuttavia, se le attività e i runnable 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 i timeout per le attività e gli elementi eseguibili.

Prima di iniziare

  1. Se non hai mai utilizzato Batch, consulta la guida introduttiva all'utilizzo di Batch e attivalo completando i prerequisiti per progetti e utenti.
  2. Per ottenere le autorizzazioni necessarie per creare un job, chiedi all'amministratore di concederti i seguenti ruoli IAM:

    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 i ruoli personalizzati o altri ruoli predefiniti.

Impostare i timeout

Puoi impostare i timeout per i runnable, 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 dell'attività, che è la somma di tutti i singoli tempi di esecuzione dei relativi elementi eseguibili. Ad esempio, se un'attività ha tre elementi eseguibili che vengono eseguiti contemporaneamente per 1 minuto, il tempo di esecuzione dell'attività è di 3 minuti, non 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, supponiamo di impostare il timeout di un'attività su 60 secondi e il timeout di ogni eseguibile dell'attività su 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 i runnable del job, analizza i log di job simili che hai eseguito in precedenza per determinare il tempo di esecuzione tipico per le attività e i runnable per carichi di lavoro simili.

Impostare il timeout per un'attività

Utilizza l'interfaccia a riga di comando o l'API REST di Google Cloud per creare un job che include il campo maxRunDuration nell'oggetto taskSpec del file JSON:

{
    "taskGroups": [
      {
        "taskSpec": {
          ...
          "maxRunDuration": "TIMEOUT"
        }
      }
    ]
}

Sostituisci TIMEOUT con il numero massimo di secondi o sezioni frazionate per cui vuoi consentire l'esecuzione dell'attività. Ad esempio, 255s.

Un job che imposta un timeout di 255 secondi per un'attività 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."
              }
            }
          ],
          "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 la documentazione per la risoluzione dei problemi relativi al codice di uscita 50005.

Impostare il timeout per un eseguibile

Utilizza l'interfaccia a riga di comando o l'API REST di Google Cloud per creare un job che include il 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