Warning
Some of the translations on the training portal are out of date. The translated material may be incomplete or incorrect. We plan to update the translations later this year. In the meantime, please try to work through the English-language material if you can.
16. Tratamento de erros e resolução de problemas¶
16.1 Depuração de erros de execução¶
Quando a execução de um processo termina com um status de saída diferente de zero, o Nextflow encerra a execução e informa sobre a tarefa com falhas:
Clique no ícone no código para ver explicações.
ERROR ~ Error executing process > 'INDEX'
Caused by: # (1)!
Process `INDEX` terminated with an error exit status (127)
Command executed: # (2)!
salmon index --threads 1 -t transcriptome.fa -i index
Command exit status: # (3)!
127
Command output: # (4)!
(empty)
Command error: # (5)!
.command.sh: line 2: salmon: command not found
Work dir: # (6)!
/Users/pditommaso/work/0b/b59f362980defd7376ee0a75b41f62
- Uma descrição da causa do erro
- O comando executado
- O status de saída do comando
- A saída padrão do comando, quando disponível
- O erro padrão do comando
- O diretório de trabalho do comando
Analise cuidadosamente os dados do erro, já que eles podem fornecer informações valiosas para a depuração.
Se isso não for o suficiente, use cd
para entrar no diretório de trabalho da tarefa. Ele contem todos os arquivos necessários para reproduzir o erro de forma isolada.
O diretório de execução da tarefa possui os seguintes arquivos:
.command.sh
: O script do comando..command.run
: Um wrapper do comando usado para executar a tarefa..command.out
: A saída padrão completa da tarefa..command.err
: O erro padrão completo da tarefa..command.log
: A saída do wrapper de execução..command.begin
: Um arquivo sentinela criado no momento que a tarefa é iniciada..exitcode
: Um arquivo contendo o código de saída da tarefa.- Os arquivos de entrada da tarefa (links simbólicas)
- Os arquivos de saída da tarefa
Certifique-se que o arquivo .command.sh
contém o comando esperado e que todas as variáveis
foram substituídas pelos valores desejados.
Também verifique a existência dos arquivos .exitcode
e .command.begin
, que, se ausentes, sugerem que a tarefa nunca foi executada pelo subsistema (o escalonador de lotes, por exemplo). Se o arquivo .command.begin
existir, a tarefa foi iniciada mas foi provavelmente encerrada abruptamente.
Para verificar a causa do erro, você pode replicar a execução com falhas usando bash .command.run
.
16.2 Ignorando erros¶
Existem casos em que um erro em um processo é esperado e não deve encerrar a execução do fluxo de trabalho.
Para lidar com isso, forneça o valor ignore
a errorStrategy
:
Se você deseja ignorar qualquer erro, você pode especificar a mesma diretiva em um arquivo de configuração:
16.3 Tolerância automática a falhas¶
Em casos mais raros, erros podem surgir por causa de condições transitórias. Nessas situações, uma estratégia eficaz é re-executar a tarefa com falhas.
Ao usar a estratégia de erro retry
a tarefa é re-executada uma segunda vez se ela retornar um status de saída diferente de zero antes de encerrar a execução completa do fluxo de trabalho.
A diretiva maxRetries pode ser utilizada para configurar o número de tentativas que uma tarefa pode ser re-executada antes de declarar que ela falhou com uma condição de erro.
16.4 Re-execução com atraso¶
Existem casos em que os recursos necessários para a execução estão temporariamente indisponíveis (por exemplo, congestionamento de rede). Nesses casos apenas re-executar a tarefa provavelmente levará a um erro idêntico. Uma re-execução com um atraso exponencial pode contribuir de uma melhor forma para a resolução desses erros.
16.5 Alocação dinâmica de recursos¶
Uma situação bastante comum é que diferentes instâncias de um mesmo processo podem ter necessidades diferentes de recursos computacionais. Nessas situações, solicitar uma quantidade de memória muito baixa, por exemplo, irá levar algumas tarefas a falharem. Por outro lado, usar um limite mais elevado que abrange todas as suas tarefas pode reduzir significativamente a prioridade de execução delas em um sistema de escalonamento de tarefas.
Para lidar com isso, você pode utilizar uma estratégia de erro retry
e aumentar os recursos computacionais alocados pela tarefa em cada tentativa consecutiva.
- A memória é definida de forma dinâmica, a primeira tentativa é com 2 GB, a segunda com 4 GB, e assim sucessivamente.
- O tempo de execução da tarefa é configurado dinamicamente também, a primeira tentativa é com 1 hora, a segunda com 2 horas, e assim sucessivamente.
- Se a tarefa retorna um status de saída igual a
140
a estratégia de erro seráretry
, caso contrário, a execução será encerrada. - O processo será re-executado até três vezes.