Compartilhar via


Erros de tarefa e trabalho no Lote do Azure

Vários erros podem ocorrer quando você adiciona, agenda ou executa tarefas e trabalhos no Lote do Azure. É fácil detectar erros que ocorrem quando você adiciona trabalhos e tarefas. A API, a linha de comando ou a interface do usuário geralmente retornam qualquer falha imediatamente. Este artigo aborda como verificar e lidar com erros que ocorrem após os trabalhos e as tarefas serem enviados.

Falhas de trabalho

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

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

  • JobPreparationTask. Opcionalmente, você pode especificar uma tarefa de preparação do trabalho a 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 o trabalho não será concluído.

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

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

Propriedades de trabalho

Verifique se há erros nas seguintes propriedades da tarefa em JobExecutionInformation:

  • A propriedade terminateReason 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 onTaskFailure do 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 será definida se houver um erro de agendamento.

Tarefa de preparação do trabalho

Uma instância de uma tarefa de preparação do 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 do 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 Trabalho - Status da Tarefa de Preparação e Liberação da Lista para listar o status de execução de todas as instâncias de tarefas de preparação e liberação de trabalhos para uma tarefa específica. Como em outras tarefas, JobPreparationTaskExecutionInformation está disponível com propriedades como failureInfo, exitCode e result.

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

Se ocorrer falha em uma tarefa de preparação do trabalho, ela não será executada. O trabalho não foi concluído e está preso. Se não houver outros trabalhos com tarefas que possam ser agendadas, o pool poderá não ser utilizado.

Tarefas de liberação do trabalho

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

Você pode usar a API Trabalho - Status da Tarefa de Preparação e Liberação da Lista para listar o status de execução de todas as instâncias de tarefas de preparação e liberação de trabalhos para uma tarefa específica. Como em outras tarefas, JobReleaseTaskExecutionInformation está disponível com propriedades como failureInfo, exitCode e result.

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

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 foram baixados.
  • Um ou mais outputFiles especificados para uma tarefa não foram carregados.
  • O tempo decorrido da tarefa excede a propriedade maxWallClockTime especificada em TaskConstraints.

Em todos os casos, verifique se há erros e informações sobre os erros nas seguintes propriedades:

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

  • A tarefa sempre se move para o TaskState completed, independentemente de ter sido bem-sucedida ou reprovada.

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

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

Linhas de comando de tarefas

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

A saída da linha de comando da tarefa grava nos 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 abrangente de erros para que seu aplicativo detecte e diagnostique prontamente os problemas.

Registros de tarefas

Se o nó do pool que executou uma tarefa ainda existir, você poderá obter e exibir os arquivos de log das tarefas. Várias APIs permitem listar e obter arquivos de tarefas, como Arquivo - Obter da Tarefa. Você também pode listar e exibir os arquivos de log de uma tarefa ou nó usando o portal do Microsoft Azure.

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

    Captura de tela de uma página de visão geral do nó com os logs do Upload em lote destacados.

  2. Na página Upload logs em lote, selecione Escolher contêiner de armazenamento, selecione um contêiner de Armazenamento do Microsoft Azure para o qual fazer o upload e selecione Iniciar upload.

    Captura de tela da página de upload de logs em lote.

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

    Captura de tela dos logs de tarefas em um contêiner de armazenamento.

Arquivos de saída

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

Em cada upload de arquivo, o Lote grava dois arquivos de log no nó de computação, fileuploadout.txt e fileuploaderr.txt. Você pode analisar esses arquivos de log para saber mais sobre uma falha específica. Se o upload de 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óximas etapas