Introducción
Este documento describe cómo resolver problemas o depurar aplicaciones IOX que encuentran problemas al iniciarse o detenerse inesperadamente.
Antecedentes
Cuando desarrolle aplicaciones IOX, el mejor enfoque es desarrollarlo en otra plataforma y/o sandbox. Una vez que la aplicación IOX deseada esté probada y lista, se puede empaquetar e implementar en un dispositivo compatible con IOX. En algunos casos, la implementación no funciona como se esperaba, la aplicación puede detenerse inesperadamente o incluso puede que no se inicie.
El comportamiento predeterminado para e IOX VM/container/application es detenerse tan pronto como finalice el comando target. Esto dificulta la resolución de problemas si ocurre algo inesperado, ya que toda la información no persistente desaparecerá. Otra consecuencia es que se tarda mucho tiempo cuando se desea jugar/experimentar con las capacidades de las aplicaciones IOX. Para iniciar otra aplicación/destino/comando/secuencia de comandos se requiere al menos cambiar el package.yaml, crear el nuevo paquete, desactivar la aplicación actual, actualizar con el nuevo paquete, volver a activar la aplicación e iniciarla.
Información Básica sobre la Terminación de la Aplicación IOX
El administrador local y el cliente IOX no proporcionan mucha información sobre la razón por la que se han detenido las aplicaciones, los contenedores o las VM. Afortunadamente, el 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 no siempre te ayudará, en muchos casos te lleva a la razón que estás buscando.
Para obtener el archivo 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 obtener el registro mediante el Administrador local:
- Inicie sesión en el Administrador local.
- Como se muestra en la imagen, haga clic en start deactivate manage para la aplicación correspondiente

- Seleccione la pestaña Logs, como se muestra en la imagen:

- Descargue el 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. Este es un código de retorno reservado y significa: comando no encontrado, que indica que se ha especificado un comando defectuoso como destino o que la secuencia de comandos que se ha iniciado intenta llamar a un comando defectuoso.
Códigos de salida reservados más comunes:
| RC |
Significado |
Comentario |
| 1 |
Catchall para errores generales |
Errores varios, como "dividir por cero" y otras operaciones no permisibles |
| 2 |
Uso incorrecto de los ensamblados de shell |
Falta la palabra clave, el comando o el problema de permisos (y difiere el código de retorno 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 sólo argumentos enteros en el rango de 0 a 255 |
| 128+n |
Señal de error fatal "n" |
el código de salida devuelve 137 (128 + 9) -> la señal de error de la aplicación era 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 de intervalo (RC>255) |
exit toma sólo argumentos enteros en el rango de 0 a 255 |
Puede encontrar más información al respecto aquí: http://tldp.org/LDP/abs/html/exitcodes.html
Cómo evitar que los contenedores IOX se detengan al finalizar la aplicación/destino
El tema anterior proporciona información sobre cómo resolver problemas de una aplicación que falla, pero no impide que la aplicación IOX se detenga. Esto significa que la información más probable y valiosa relacionada con la resolución de problemas ha desaparecido, ya que todos los datos no persistentes ya no existen.
Como se mencionó anteriormente, otro caso práctico es jugar con las capacidades de la aplicación IOX iniciada o ser flexible con comandos y argumentos.
Para evitar que las aplicaciones IOX terminen al final de la aplicación, puede pasar el comando -debug on al comando activate:
[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 tener acceso al contenedor incluso si la aplicación finaliza. Aquí puede iniciar otros comandos y experimentar libremente con la aplicación en el entorno en el que se ejecuta. Esto ahorra mucho tiempo en la resolución de problemas de la aplicación o en la obtención del objetivo y los argumentos adecuados establecidos.