Limitar os tempos de execução de tarefas e executáveis usando timeouts

Este documento descreve como limitar os tempos de execução de tarefas e executáveis definindo tempos limite. Como alternativa, se você quiser que um executável termine assim que todos os outros executáveis na tarefa forem concluídos, use um executável em segundo plano em vez disso.

Um tempo limite especifica o período permitido para a execução de uma tarefa ou executável. O Batch geralmente não permite que os jobs sejam executados por mais de 14 dias e não define tempos limite padrão para tarefas e executáveis individuais. Consequentemente, uma tarefa ou executável individual geralmente pode ser executado por até 14 dias antes da falha automática. No entanto, se as tarefas e os executáveis não forem destinados a serem executados por esse período, essa configuração poderá causar custos e atrasos inesperados. Para evitar tempos de execução excessivos, defina tempos limite para tarefas e executáveis.

Antes de começar

  1. Se você nunca usou o Batch, consulte Introdução ao Batch e ative o serviço concluindo os pré-requisitos para projetos e usuários.
  2. Para receber as permissões necessárias para criar um job, peça ao administrador para conceder os seguintes papéis do IAM:

    Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

    Também é possível conseguir as permissões necessárias usando personalizados papéis ou outros predefinidos papéis.

Definir limites de tempo

É possível definir tempos limite para executáveis, tarefas ou ambos. O tempo limite de um executável especifica o tempo máximo de execução dele. O tempo limite de uma tarefa especifica o tempo máximo de execução dela, que é a soma de todos os tempos de execução individuais dos executáveis. Por exemplo, se uma tarefa tiver três executáveis que são executados ao mesmo tempo por um minuto, o tempo de execução da tarefa será de três minutos, não um minuto.

Se você definir tempos limite sobrepostos, como um tempo limite para um executável e a tarefa dele, apenas um tempo limite precisará ser excedido para acionar a falha automática. Por exemplo, suponha que você defina o tempo limite de uma tarefa como 60 segundos e o tempo limite de cada um dos executáveis dessa tarefa como 120 segundos. Em seguida, essa tarefa de exemplo e todos os executáveis dela falham quando a soma dos tempos de execução dos executáveis excede 60 segundos, e é impossível acionar os tempos limite de 120 segundos.

Para escolher o tempo limite adequado para as tarefas e os executáveis do job, analise os registros de jobs semelhantes que você executou anteriormente para determinar o tempo de execução típico das tarefas e dos executáveis para cargas de trabalho semelhantes.

Definir o tempo limite de uma tarefa

Use a Google Cloud CLI ou a API REST para criar um job que inclua o campo maxRunDuration no objeto taskSpec do arquivo JSON:

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

Substitua TIMEOUT pelo número máximo de segundos ou seções fracionárias que você quer permitir que a tarefa seja executada. Por exemplo, 255s.

Um job que define um tempo limite de 255 segundos para uma tarefa teria um arquivo de configuração JSON semelhante ao seguinte:

{
    "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 o tempo limite de uma tarefa for excedido, a tarefa falhará automaticamente e o tempo limite excedido será indicado pelo código de saída 50005 nos eventos e registros de status do job. Para mais informações sobre tempos limite excedidos, consulte a documentação de solução de problemas para o código de saída 50005.

Definir o tempo limite de um executável

Use a Google Cloud CLI ou a API REST para criar um job que inclua o campo timeout no objeto runnable do arquivo JSON:

{
    "taskGroups": [
      {
        "taskSpec": {
          "runnables": [
            {
              ...
              "timeout": "TIMEOUT"
            }
          ]
        }
      }
    ]
}

Substitua TIMEOUT pelo número máximo de segundos ou seções fracionárias que você quer permitir que o executável seja executado. Por exemplo, 3.5s.

Um job que define um tempo limite de 3,5 segundos para um executável teria um arquivo de configuração JSON semelhante ao seguinte:

{
    "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 o tempo limite de um executável for excedido, o executável falhará automaticamente e o tempo limite excedido será indicado pelo código de saída 50005 nos eventos e registros de status do job. Para mais informações sobre tempos limite excedidos, consulte a documentação de solução de problemas para o código de saída 50005.

A seguir