Limita i tempi di esecuzione per attività ed eseguibili utilizzando i timeout

Questo documento descrive come limitare i tempi di esecuzione delle attività e degli elementi eseguibili impostando i timeout.

Un timeout specifica per quanto tempo è consentita l'esecuzione di un'attività o di un'esecuzione eseguibile. La modalità batch non consente l'esecuzione di job per più di 14 giorni e non imposta timeout predefiniti per singole attività ed elementi eseguibili. Di conseguenza, una singola attività o eseguibile può essere eseguita per 14 giorni prima dell'errore automatico. Tuttavia, se le attività e gli elementi 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à ed elementi eseguibili.

Prima di iniziare

Imposta timeout

Puoi impostare timeout per gli elementi eseguibili, le attività o entrambi. Il timeout per un elemento eseguibile specifica il tempo di esecuzione massimo per quell'esecuzione. Il timeout per un'attività specifica il tempo di esecuzione massimo per quell'attività, ovvero la somma di tutti i singoli tempi di esecuzione dei suoi elementi eseguibili. Ad esempio, se un'attività ha 3 eseguibili che vengono tutti 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'attività eseguibile che per quella eseguibile, dovrai superare un solo timeout per attivare l'errore automatico. Ad esempio, supponi di impostare il timeout di un'attività su 60 secondi e il timeout di ciascuno degli elementi eseguibili dell'attività su 120 secondi. Poi, questa attività di esempio e tutti i suoi elementi eseguibili hanno esito negativo quando la somma dei tempi di esecuzione degli elementi 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, analizza i log dei job simili che hai eseguito in precedenza per determinare il tempo di esecuzione tipico per le attività e gli elementi 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 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à ha 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 riesce automaticamente e il timeout superato viene indicato dal codice di uscita 50005 negli eventi e nei log di stato del job. Per ulteriori informazioni sui timeout per superamento, consulta la documentazione per la risoluzione dei problemi relativi al codice di uscita 50005.

Imposta il timeout per un elemento 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 dell'esecuzione. Ad esempio, 3.5s.

Un job che imposta un timeout di 3,5 secondi per un elemento 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 elemento eseguibile viene superato, quest'ultimo non riesce automaticamente e il timeout superato viene indicato dal codice di uscita 50005 nei log e negli eventi di stato del job. Per ulteriori informazioni sui timeout per superamento, consulta la documentazione per la risoluzione dei problemi relativi al codice di uscita 50005.

Passaggi successivi