Esta página descreve como repetir tarefas automaticamente ou algumas falhas.
Um job em lote falha quando pelo menos uma das tarefas falha, o que pode acontecer por vários motivos. Por padrão, cada tarefa em um job é executada apenas uma vez. se uma tarefa falhar, ela não será repetida. No entanto, alguns problemas que fazem com que uma tarefa pode ser facilmente resolvido ao repetir a tarefa. Nesses casos, configurar o job para tentar novamente as tarefas automaticamente pode ajudar a reduzir a dificuldade de solução de problemas e o tempo de execução geral dos seus jobs.
As novas tentativas automáticas são adequadas para tarefas acopladas com flexibilidade (independentes) e podem ajudar com vários problemas. Por exemplo, novas tentativas automáticas de tarefas pode resolver problemas urgentes, como os seguintes:
- a preempção de VMs spot
- Eventos de manutenção de VM e erros do host
- erros de rede temporários
Ao criar um job, você pode configurar novas tentativas automáticas para cada tarefa. Especificamente, para cada tarefa, você pode usar uma das seguintes opções: opções de configuração:
- Por padrão, cada tarefa não é repetida em caso de falha.
- Tentar novamente as tarefas para todas as falhas: é possível configurar o número máximo de tentativas automáticas de tarefas com falha. É possível especificar entre 0 (padrão) e 10 tentativas.
- Tentar novamente tarefas para algumas falhas: é possível configurar diferentes ações de tarefas, como repetição automática ou falha sem repetição, para falhas específicas. A ação oposta é realizada para todas as falhas não especificadas. Cada falha específica pode ser identificada por um código de saída que é definido pelo aplicativo ou Batch.
Antes de começar
- Se você nunca usou o Batch antes, revise Introdução ao Batch e ativar o Batch. pré-requisitos para projetos e usuários.
-
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:
-
Editor de jobs em lote (
roles/batch.jobsEditor
) no projeto -
Usuário da conta de serviço (
roles/iam.serviceAccountUser
) na conta de serviço do job, que é a conta de serviço padrão do Compute Engine
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.
-
Editor de jobs em lote (
Repetir tarefas para todas as falhas
É possível definir
número máximo de novas tentativas automáticas (campo maxRetryCount
)
para tarefas com falha de um job usando a CLI gcloud ou a API Batch.
gcloud
Crie um arquivo JSON que especifique os detalhes de configuração do job e as
maxRetryCount
.Por exemplo, para criar um job de script básico que especifique o número máximo de tentativas para tarefas com falha, crie um arquivo JSON com o seguinte conteúdo:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}" } } ], "maxRetryCount": MAX_RETRY_COUNT }, "taskCount": 3 } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }
Substitua
MAX_RETRY_COUNT
pelo número máximo de novas tentativas para cada tarefa. Para que um job possa repetir tarefas com falha, esse valor precisa ser definido como um número inteiro entre1
e10
. Se o campomaxRetryCount
não for especificado, o valor padrão será0
, o que significa que nenhuma tarefa será repetida.Para criar e executar o job, use o comando
gcloud batch jobs submit
:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Substitua:
JOB_NAME
: o nome do job.LOCATION
: o local do job.JSON_CONFIGURATION_FILE
: o caminho para um arquivo JSON com os detalhes de configuração do job.
API
Faça uma solicitação POST
ao
Método jobs.create
que especifica o campo maxRetryCount
.
Por exemplo, para criar um job de script básico que especifique o número máximo de tentativas para tarefas com falha, faça a seguinte solicitação:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world from task ${BATCH_TASK_INDEX}"
}
}
],
"maxRetryCount": MAX_RETRY_COUNT
},
"taskCount": 3
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
Substitua:
PROJECT_ID
: o ID do projeto do seu projeto.LOCATION
: o local do job.JOB_NAME
: o nome do job.MAX_RETRY_COUNT
: o número máximo de novas tentativas para cada tarefa. Para que um job possa repetir tarefas com falha, Esse valor precisa ser definido como um número inteiro entre1
e10
. Se o campomaxRetryCount
não for especificado, o valor padrão será0
, o que significa que nenhuma tarefa será repetida.
Repetir tarefas para algumas falhas
Você pode definir como quer que um job lide com diferentes falhas de tarefas usando
políticas de ciclo de vida (campo lifecyclePolicies[]
).
Uma política de ciclo de vida consiste em uma
ação (campo action
),
condição de ação (campo actionCondition
)
e código de saída (campo exitCodes[]
).
A ação especificada é realizada sempre que a
condição de ação (um código de saída específico) ocorre.
É possível especificar uma das seguintes ações:
RETRY_TASK
: repete tarefas que falham com os códigos de saída especificados naexitCodes[]
. As tarefas que falham com códigos de saída não especificados não são tentadas novamente.FAIL_TASK
: não tente novamente tarefas que falham com os códigos de saída especificados no campoexitCodes[]
. As tarefas que falham com códigos de saída não especificados são tentadas novamente.
Notavelmente, todas as tarefas que falham com códigos de saída não especificados levam o
ação oposta: alguns códigos de saída são repetidos e outros falharam.
Consequentemente, para que a política de ciclo de vida funcione conforme o esperado,
você também precisa definir o
número máximo de repetições automáticas (campo maxRetryCount
)
para permitir que o job tente novamente tarefas com falhas pelo menos uma vez.
Cada código de saída representa uma falha específica definida pelo aplicativo ou pelo lote. Os códigos de saída de 50001 a 59999 são reservados e definidos pelo lote. Para obter mais informações sobre os códigos de saída reservados, consulte Solução de problemas.
É possível especificar que um job tente repetir ou falhar tarefas após falhas específicas. usando a CLI gcloud ou a API Batch.
gcloud
Crie um arquivo JSON que especifique os detalhes de configuração do job, o campo
maxRetryCount
e os subcamposlifecyclePolicies[]
.Para criar um job básico de script que repita as tarefas com falha somente para alguns códigos de saída, crie um arquivo JSON com o seguinte conteúdo:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "echo Hello world from task ${BATCH_TASK_INDEX}" } } ], "maxRetryCount": MAX_RETRY_COUNT, "lifecyclePolicies": [ { "action": "ACTION", "actionCondition": { "exitCodes": [EXIT_CODES] } } ] } } ], "logsPolicy": { "destination": "CLOUD_LOGGING" } }
Substitua:
MAX_RETRY_COUNT
: o número máximo de novas tentativas para cada tarefa. Para que um job possa repetir tarefas com falha, esse valor precisa ser definido como um número inteiro entre1
e10
. Se o campomaxRetryCount
não for especificado, o valor padrão será0
. ou seja, não tentar realizar nenhuma tarefa novamente.ACTION
: a ação,RETRY_TASK
ouFAIL_TASK
, que você quer para tarefas que falham com os códigos de saída especificados. As tarefas que falham com códigos de saída não especificados realizam a outra ação.EXIT_CODES
: uma lista separada por vírgulas de um ou mais códigos de saída em que você quer acionar o evento ação, por exemplo,50001, 50002
.Cada código de saída pode ser definido pelo aplicativo ou em lote. Os códigos de saída de
50001
a59999
são reservados pelo Batch. Para mais informações sobre os códigos de saída reservados, consulte Solução de problemas.
Por exemplo, o job a seguir tenta novamente apenas as tarefas que falham devido à preempção de VMs do Spot.
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "sleep 30" } } ], "maxRetryCount": 3, "lifecyclePolicies": [ { "action": "RETRY_TASK", "actionCondition": { "exitCodes": [50001] } } ] } } ], "allocationPolicy": { "instances": [ { "policy": { "machineType": "e2-standard-4", "provisioningModel": "SPOT" } } ] } }
Para criar e executar o job, use o Comando
gcloud batch jobs submit
:gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Substitua:
JOB_NAME
: o nome do job.LOCATION
: o local do job.JSON_CONFIGURATION_FILE
: o caminho para um arquivo JSON com os detalhes de configuração do job.
API
Faça uma solicitação POST
para o
método jobs.create
que especifique o campo maxRetryCount
e os subcampos lifecyclePolicies[]
.
Para criar um job básico de script que repita as tarefas com falha somente para alguns códigos de saída, faça a seguinte solicitação:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "echo Hello world from task ${BATCH_TASK_INDEX}"
}
}
],
"maxRetryCount": MAX_RETRY_COUNT,
"lifecyclePolicies": [
{
"action": "ACTION",
"actionCondition": {
"exitCodes": [EXIT_CODES]
}
}
]
}
}
],
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
Substitua:
PROJECT_ID
: o ID do projeto do seu projeto.LOCATION
: o local do trabalho.JOB_NAME
: o nome do job.MAX_RETRY_COUNT
: o número máximo de novas tentativas para cada tarefa. Para que um job possa repetir tarefas com falha, Esse valor precisa ser definido como um número inteiro entre1
e10
. Se o campomaxRetryCount
não for especificado, o valor padrão será0
. ou seja, não tentar realizar nenhuma tarefa novamente.ACTION
: a ação,RETRY_TASK
ouFAIL_TASK
, que você quer para tarefas que falham com os códigos de saída especificados. As tarefas que falham com códigos de saída não especificados realizam a outra ação.EXIT_CODES
: uma lista separada por vírgulas de um ou mais códigos de saída em que você quer acionar o evento ação, por exemplo,50001, 50002
.Cada código de saída pode ser definido pelo seu aplicativo ou Batch. Os códigos de saída de
50001
a59999
são reservados pelo lote. Para obter mais informações sobre os códigos de saída reservados, consulte Solução de problemas.
Por exemplo, o job a seguir tenta repetir apenas tarefas que falham devido a para a preempção das VMs spot.
POST https://batch.googleapis.com/v1/projects/example-project/locations/us-central1/jobs?job_id=example-job
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "sleep 30"
}
}
],
"maxRetryCount": 3,
"lifecyclePolicies": [
{
"action": "RETRY_TASK",
"actionCondition": {
"exitCodes": [50001]
}
}
]
}
}
],
"allocationPolicy": {
"instances": [
{
"policy": {
"machineType": "e2-standard-4",
"provisioningModel": "SPOT"
}
}
]
}
}
Modificar o comportamento da tarefa com base no número de novas tentativas
Opcionalmente, depois de ativar as novas tentativas automáticas de uma tarefa,
conforme descrito nas seções anteriores desta página, você pode
atualizar os runnables para usar a
variável de ambiente predefinida BATCH_TASK_RETRY_ATTEMPT
.
A variável BATCH_TASK_RETRY_ATTEMPT
descreve o número de vezes
que essa tarefa já foi tentada. Use o
BATCH_TASK_RETRY_ATTEMPT
nos executáveis se você quiser
que uma tarefa se comporte de maneira diferente com base no número de novas tentativas.
Por exemplo, quando uma tarefa está sendo repetida, é possível
confirmar quais comandos já foram executados na
tentativa anterior. Para mais informações, consulte
Variáveis de ambiente predefinidas.
A seguir
- Se você tiver problemas para criar ou executar um job, consulte Solução de problemas.
- Conferir jobs e tarefas.
- Saiba mais sobre opções de criação de jobs.