Introdução
Este documento descreve como solucionar problemas ou depurar aplicativos IOX que encontram problemas para iniciar ou parar inesperadamente.
Informações de Apoio
Quando você desenvolve aplicativos IOX, a melhor abordagem é desenvolvê-los em outra plataforma e/ou sandbox. Depois que o aplicativo IOX desejado for testado e estiver pronto, ele poderá ser empacotado e implantado em um dispositivo habilitado para IOX. Em alguns casos, essa implantação não funciona como esperado, o aplicativo pode parar inesperadamente ou nem mesmo iniciar.
O comportamento padrão de uma VM/contêiner/aplicativo IOX é parar assim que o comando de destino for encerrado. Isso dificulta a identificação e solução de problemas se algo inesperado acontecer, pois todas as informações não persistentes desaparecerão. Outra consequência é que é muito demorado quando você quer jogar/experimentar os recursos dos aplicativos IOX. Iniciar outro aplicativo/destino/comando/script exigiria que você pelo menos alterasse o pacote.yaml, crie o novo pacote, desative o aplicativo atual, atualize com o novo pacote, reative o aplicativo e inicie-o.
Informações básicas sobre a finalização de aplicativos IOX
O Gerenciador local e o cliente IOX não fornecem muitas informações sobre o motivo pelo qual os aplicativos/contêineres/VMs foram interrompidos. Felizmente, o watchDog.log rastreia isso e também fornece o último código de saída/retorno do aplicativo. Embora isso nem sempre possa ajudá-lo, em muitos casos, isso leva você ao motivo pelo qual você está procurando.
Para buscar o watchDog.log com o cliente IOX:
[jedepuyd@db ~]$ ioxclient app logs tail iox_docker_test watchDog.log 10
Currently active profile : default
Command Name: application-logs-tail
App/Service : iox_docker_test, Logfile : watchDog.log, viewing last 10 lines
APP END TIME:1498207460
Time taken by App : 0 minutes and 0 seconds.
Got the ip address - 10.197.215.227 for interface eth0
All interfaces got the ips
APP START TIME:1498207536
App iox_docker_test started with PID : 11
Monitoring this process now
App iox_docker_test completed with exit code: 127
APP END TIME:1498207536
Time taken by App : 0 minutes and 0 seconds.
Para buscar o registro usando o Gerenciador local:
- Faça login no Gerenciador local.
- Como mostrado na imagem, clique em iniciar desativar gerenciar para o aplicativo relevante

- Selecione a guia Logs, conforme mostrado na imagem:

- Faça o download do watchDog.log

Por exemplo, esse aplicativo é encerrado inesperadamente e você vê isso no watchDog.log
APP START TIME:1498207536
App iox_docker_test started with PID : 11
Monitoring this process now
App iox_docker_test completed with exit code: 127
APP END TIME:1498207536
Como você pode ver no trecho de log acima, o código de saída era 127. Este é um código de retorno reservado e significa: comando não encontrado, que indica que um comando defeituoso está especificado como um destino ou que o script iniciado tenta chamar um comando defeituoso.
Códigos de saída reservados mais comuns:
| RC |
Significado |
Comentário |
| 1 |
Chamada seletiva para erros gerais |
Erros diversos, como "dividir por zero" e outras operações inadmissíveis |
| 2 |
Uso indevido de construções shell |
Palavra-chave ou comando ausente, ou problema de permissão (e código de retorno diff em uma comparação de arquivo binário com falha). |
| 126 |
Não foi possível executar o comando |
O problema ou comando de permissão não é um executável |
| 127 |
Comando não encontrado |
Possível problema com $PATH ou um erro de digitação |
| 128 |
Argumento inválido para sair (RC>255) |
exit aceita apenas args inteiros no intervalo de 0 a 255 |
| 128+N |
Sinal de erro fatal "n" |
o código de saída retorna 137 (128 + 9) -> o sinal de erro do aplicativo foi 9 |
| 130 |
Encerrado por Ctrl+c |
O Control-C é o sinal de erro fatal 2, (130 = 128 + 2, veja acima) |
| 255 |
Status de saída fora do intervalo (RC>255) |
exit aceita apenas args inteiros no intervalo de 0 a 255 |
Mais informações sobre isso podem ser encontradas aqui: http://tldp.org/LDP/abs/html/exitcodes.html
Impedindo que os contêineres IOX parem na finalização do aplicativo/destino
O tópico acima fornece informações sobre como solucionar problemas de um aplicativo com falha, mas não impede que o aplicativo IOX pare. Isso significa que, muito provavelmente, as informações valiosas relacionadas à solução de problemas desapareceram, pois todos os dados não persistentes não existem mais.
Como mencionado acima, outro caso de uso é brincar com os recursos do aplicativo IOX iniciado ou ser flexível com comandos e argumentos.
Para evitar que os aplicativos IOX terminem no final do aplicativo, você pode passar o comando -debug on para o comando ativate:
[jedepuyd@db ~]$ ioxclient app activate -debug on testdebug
Currently active profile : default
Command Name: application-activate
App testdebug is Activated
[jedepuyd@db ~]$ ioxclient app start testdebug
Currently active profile : default
Command Name: application-start
App testdebug is Started
[jedepuyd@db ~]$ ioxclient app console testdebug
Currently active profile : default
Command Name: application-console
Console setup is complete..
Running command : [ssh -p 2222 -i testdebug.pem appconsole@10.48.43.197]
/ #
No exemplo acima, depois de ativar e iniciar com o sinalizador -debug on, você pode acessar o contêiner mesmo se o aplicativo for encerrado. Você pode iniciar outros comandos aqui e pode experimentar livremente o aplicativo no ambiente em que ele é executado. Isso economiza muito tempo na solução de problemas de aplicativos ou na obtenção do destino e dos argumentos corretos definidos.