Introducción
Este documento describe cómo resolver problemas o depurar aplicaciones IOX que encuentran problemas en el inicio o se detiene inesperadamente.
Antecedentes
Cuando desarrolla aplicaciones IOX, el mejor enfoque es desarrollarlas en otra plataforma o sandbox. Una vez que la aplicación IOX deseada se ha probado y está lista, se puede empaquetar e implementar en un dispositivo compatible con IOX. En algunos casos, esa implementación no funciona como se esperaba, la aplicación podría detenerse inesperadamente o incluso no empezar.
El comportamiento predeterminado para y IOX VM/container/application es detenerse tan pronto como el comando target haya terminado. Esto dificulta la resolución de problemas si ocurre algo inesperado, ya que toda la información no persistente desaparecerá. Otra consecuencia es que lleva mucho tiempo reproducir/experimentar con las capacidades de las aplicaciones IOX. Al iniciar otra aplicación/destino/comando/script, se requiere que al menos cambie el paquete.yaml, cree el nuevo paquete, desactive su aplicación actual, actualice con el nuevo paquete, vuelva a activar la aplicación y comience.
Información básica sobre la terminación de la aplicación IOX
Local Manager y el cliente IOX no proporcionan mucha información sobre la razón por la que las aplicaciones/contenedores/VM se han detenido. Afortunadamente, watchDog.log realiza un seguimiento de esto y también le proporciona el último código de salida/retorno de la aplicación. Aunque esto puede no siempre ayudarle, en muchos casos le lleva a la razón que busca.
Para obtener watchDog.log con el 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 recuperar el registro mediante Local Manager:
- Inicie sesión en Local Manager.
- Como se muestra en la imagen, haga clic en iniciar desactivar administrar para la aplicación correspondiente
- Seleccione la ficha Logs, como se muestra en la imagen:
- Descargue watchDog.log
Por ejemplo, esta aplicación finaliza inesperadamente y esto se ve en 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 puede ver en el fragmento de registro anterior, el código de salida era 127. Se trata de un código de retorno reservado y significa: comando no encontrado, que indica que se especifica un comando defectuoso como destino o que el script que se inicia intenta llamar a un comando defectuoso.
Códigos de salida reservados más comunes:
RC |
Significado |
Comentario |
1 |
Capturar errores generales |
Errores varios, como "dividir por cero" y otras operaciones inadmisibles |
2 |
Uso indebido de construcciones de conchas |
Falta la palabra clave o el comando, o el problema de permiso (y el código de respuesta diff en una comparación de archivos binarios errónea). |
126 |
No se pudo ejecutar el comando |
El problema o comando de permiso no es un ejecutable |
127 |
Comando no encontrado |
Posible problema con $PATH o un error tipográfico |
128 |
Argumento no válido para salir (RC>255) |
exit toma solamente las args enteros en el rango 0 - 255 |
128+n |
Señal de error fatal "n" |
exit code devuelve 137 (128 + 9) -> la señal de error de la aplicación fue 9 |
130 |
Terminado por Ctrl+c |
Control-C es la señal de error fatal 2, (130 = 128 + 2, ver arriba) |
255 |
Estado de salida fuera del intervalo (RC>255) |
exit toma solamente las args enteros en el rango 0 - 255 |
Puede encontrar más información al respecto aquí: http://tldp.org/LDP/abs/html/exitcodes.html
Evitar que los contenedores de IOX se detengan al finalizar la aplicación/objetivo
El tema anterior proporciona información sobre cómo resolver problemas de una aplicación defectuosa, pero no impide que la aplicación IOX se detenga. Esto significa que lo más probable es que la información valiosa relacionada con la resolución de problemas haya desaparecido, ya que ya no existen todos los datos no persistentes.
Como se mencionó anteriormente, otro caso práctico es jugar con las capacidades de la aplicación IOX iniciada o ser flexibles con comandos y argumentos.
Para evitar que las aplicaciones IOX terminen al final de la aplicación, puede pasar el comando -debug al comando enable:
[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]
/ #
En el ejemplo anterior, después de activar y comenzar con el indicador -debug on, puede acceder al contenedor incluso si la aplicación finaliza. Aquí puede iniciar otros comandos y puede experimentar libremente con la aplicación en el entorno en el que se ejecuta la aplicación. Esto ahorra mucho tiempo en la resolución de problemas de aplicaciones o en la obtención del objetivo y los argumentos adecuados.