Erros de tarefas e tarefas do Azure Batch

Vários erros podem acontecer quando você adiciona, agenda ou executa trabalhos e tarefas do Lote do Azure. É simples detetar erros que ocorrem quando você adiciona trabalhos e tarefas. A API, a linha de comando ou a interface do usuário geralmente retornam quaisquer falhas imediatamente. Este artigo aborda como verificar e lidar com erros que ocorrem depois que trabalhos e tarefas são enviados.

Falhas em trabalhos

Um trabalho é um grupo de uma ou mais tarefas, que especificam linhas de comando a serem executadas. Você pode especificar os seguintes parâmetros opcionais ao adicionar um trabalho. Esses parâmetros influenciam como o trabalho pode falhar.

  • JobConstraints. Opcionalmente, você pode usar a maxWallClockTime propriedade para definir a quantidade máxima de tempo que um trabalho pode estar ativo ou em execução. Se o trabalho exceder o maxWallClockTime, o trabalho terminará com a terminateReason propriedade definida como MaxWallClockTimeExpiry em JobExecutionInformation.

  • JobPreparationTask. Opcionalmente, você pode especificar uma tarefa de preparação de trabalho para ser executada em cada nó de computação agendado para executar uma tarefa de trabalho. O nó executa a tarefa de preparação do trabalho antes da primeira vez que executa uma tarefa para o trabalho. Se a tarefa de preparação do trabalho falhar, a tarefa não será executada e não será concluída.

  • JobReleaseTask. Opcionalmente, você pode especificar uma tarefa de liberação de trabalho para trabalhos que tenham uma tarefa de preparação de trabalho. Quando um trabalho está sendo encerrado, a tarefa de liberação de trabalho é executada em cada nó do pool que executou uma tarefa de preparação de trabalho. Se uma tarefa de liberação de trabalho falhar, o trabalho ainda será movido para um completed estado.

No portal do Azure, você pode definir esses parâmetros no Gerenciador de tarefas, tarefas de preparação e liberação e seções Avançadas da tela Adicionar trabalho em lote.

Propriedades do trabalho

Verifique se há erros nas seguintes propriedades de trabalho em JobExecutionInformation :

  • A terminateReason propriedade indica MaxWallClockTimeExpiry se o trabalho excedeu o maxWallClockTime especificado nas restrições de trabalho e, portanto, o trabalho foi encerrado. Essa propriedade também pode ser definida como taskFailed se o atributo do onTaskFailure trabalho estiver definido como performExitOptionsJobAction, e uma tarefa falhar com uma condição de saída que especifique um jobAction de terminatejob.

  • A propriedade JobSchedulingError é definida se houve um erro de agendamento.

Tarefas de preparação de trabalho

Uma instância de uma tarefa de preparação de trabalho é executada em cada nó de computação na primeira vez que o nó executa uma tarefa para o trabalho. Você pode pensar na tarefa de preparação de trabalho como um modelo de tarefa, com várias instâncias sendo executadas, até o número de nós em um pool. Verifique as instâncias da tarefa de preparação do trabalho para determinar se houve erros.

Você pode usar a API Job - List Preparation and Release Task Status para listar o status de execução de todas as instâncias de tarefas de preparação e liberação de trabalho para um trabalho especificado. Como acontece com outras tarefas, JobPreparationTaskExecutionInformation está disponível com propriedades como failureInfo, exitCodee result.

Quando uma tarefa de preparação de trabalho é executada, a tarefa que disparou a tarefa de preparação de trabalho é movida para um taskState de preparing. Se a tarefa de preparação do trabalho falhar, a tarefa de acionamento será revertida para o active estado e não será executada.

Se uma tarefa de preparação de trabalho falhar, a tarefa de trabalho de acionamento não será executada. O trabalho não termina e está preso. Se não houver outros trabalhos com tarefas que possam ser agendadas, o pool pode não ser usado.

Tarefas de liberação de trabalho

Uma instância de uma tarefa de liberação de trabalho é executada quando o trabalho está sendo encerrado em cada nó que executou uma tarefa de preparação de trabalho. Verifique as instâncias da tarefa de liberação de trabalho para determinar se houve erros.

Você pode usar a API Job - List Preparation and Release Task Status para listar o status de execução de todas as instâncias de tarefas de preparação e liberação de trabalho para um trabalho especificado. Assim como outras tarefas, JobReleaseTaskExecutionInformation está disponível com propriedades como failureInfo, exitCodee result.

Se uma ou mais tarefas de liberação de trabalho falharem, o trabalho ainda será encerrado e será movido para um completed estado.

Falhas de tarefas

As tarefas de trabalho podem falhar pelos seguintes motivos:

  • A linha de comando da tarefa falha e retorna com um código de saída diferente de zero.
  • Um ou mais resourceFiles especificados para uma tarefa não são baixados.
  • Um ou mais outputFiles especificados para uma tarefa não são carregados.
  • O tempo decorrido para a tarefa excede a maxWallClockTime propriedade especificada em TaskConstraints.

Em todos os casos, verifique as seguintes propriedades para erros e informações sobre os erros:

  • A propriedade TaskExecutionInformation tem várias propriedades que fornecem informações sobre um erro. O taskExecutionResult indica se a tarefa falhou por qualquer motivo e exitCode failureInfo fornece mais informações sobre a falha.

  • A tarefa sempre se move para o completed TaskState, seja ela bem-sucedida ou falhada.

Considere o impacto de falhas de tarefas no trabalho e em quaisquer dependências de tarefas. Você pode especificar ExitConditions para configurar ações para dependências e para o trabalho.

  • DependencyAction controla se as tarefas devem ser bloqueadas ou executadas que dependem da tarefa com falha.
  • JobAction controla se a tarefa com falha faz com que o trabalho seja desativado, encerrado ou inalterado.

Linhas de comando da tarefa

As linhas de comando de tarefas não são executadas sob um shell em nós de computação, portanto, não podem usar nativamente recursos de shell, como expansão de variável de ambiente. Para aproveitar esses recursos, você deve invocar o shell na linha de comando. Para obter mais informações, consulte Expansão de linha de comando de variáveis de ambiente.

A saída da linha de comando da tarefa grava em arquivos stderr.txt e stdout.txt . Seu aplicativo também pode gravar em arquivos de log específicos do aplicativo. Certifique-se de implementar uma verificação de erros abrangente para seu aplicativo para detetar e diagnosticar problemas prontamente.

Registos de tarefas

Se o nó do pool que executou uma tarefa ainda existir, você poderá obter e exibir os arquivos de log de tarefas. Várias APIs permitem listar e obter arquivos de tarefas, como File - Get From Task. Você também pode listar e exibir arquivos de log para uma tarefa ou nó usando o portal do Azure.

  1. Na parte superior da página Visão geral de um nó, selecione Carregar logs em lote.

    Captura de tela de uma página de visão geral do nó com Carregar logs em lote realçado.

  2. Na página Carregar logs em lote, selecione Escolher contêiner de armazenamento, selecione um contêiner de Armazenamento do Azure para carregar e selecione Iniciar carregamento.

    Captura de ecrã da página Carregar registos em lote.

  3. Você pode exibir, abrir ou baixar os logs da página do contêiner de armazenamento.

    Captura de ecrã dos registos de tarefas num contentor de armazenamento.

Arquivos de saída

Como os pools de lotes e os nós do pool geralmente são efêmeros, com nós sendo continuamente adicionados e excluídos, é melhor salvar os arquivos de log quando o trabalho é executado. Os arquivos de saída de tarefas são uma maneira conveniente de salvar arquivos de log no Armazenamento do Azure. Para obter mais informações, consulte Persistir dados de tarefas no Armazenamento do Azure com a API de serviço em lote.

Em cada carregamento de arquivo, o Batch grava dois arquivos de log no nó de computação, fileuploadout.txt e fileuploaderr.txt. Você pode examinar esses arquivos de log para saber mais sobre uma falha específica. Se o upload do arquivo não foi tentado, por exemplo, porque a tarefa em si não pôde ser executada, esses arquivos de log não existem.

Próximos passos