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 timeouts. Como alternativa, se você quiser que um executável seja concluído assim que todos os outros executáveis na tarefa forem concluídos, use um executável em segundo plano.

Um tempo limite especifica a quantidade de tempo que uma tarefa ou um executável pode ser executado. O Batch não permite que os jobs sejam executados por mais de 14 dias e não define tempos limite padrão para tarefas individuais e executáveis. Consequentemente, uma tarefa ou um executável individual pode ser executado por até 14 dias antes da falha automática. No entanto, se as tarefas e os executáveis não forem executados por tanto tempo, 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 Começar a usar o Batch e ative o Batch 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 a você 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 por meio de papéis personalizados ou de outros papéis predefinidos.

Definir limites de tempo

É possível definir tempos limite para runnables, tarefas ou ambos. O tempo limite de um executável especifica o tempo máximo de execução desse executável. 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 runnables que são executados ao mesmo tempo por um minuto, o tempo de execução da tarefa será de três minutos, não de um minuto.

Se você definir tempos limite sobrepostos, como um tempo limite para um executável e a tarefa do executável, apenas um tempo limite precisa 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 runnables dela falham quando a soma dos tempos de execução dos runnables 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ê já executou 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 CLI do Google Cloud 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, ela falhará automaticamente, e o tempo limite excedido será indicado pelo código de saída 50005 nos eventos de status e nos registros do job. Para mais informações sobre o tempo limite excedido, consulte a documentação de solução de problemas do código de saída 50005.

Definir o tempo limite para um executável

Use a CLI do Google Cloud 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 runnable 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 runnable for excedido, ele falhará automaticamente, e o tempo limite excedido será indicado pelo código de saída 50005 nos eventos de status e nos registros do job. Para mais informações sobre o tempo limite excedido, consulte a documentação de solução de problemas do código de saída 50005.

A seguir