简介
本文档介绍如何排除或调试IOX应用程序在启动过程中遇到问题或意外停止。
背景信息
开发IOX应用时,最好的方法是在另一个平台和/或沙盒上开发IOX应用。在您所需的IOX应用经过测试并准备就绪后,可以将其打包并部署到支持IOX的设备上。在某些情况下,部署未按预期工作,应用程序可能意外停止,甚至可能未启动。
和IOX VM/容器/应用的默认行为是在target命令终止后立即停止。如果发生意外情况,由于所有非持久信息都将消失,因此很难排除故障。另一个后果是,当您想要播放/尝试使用IOX应用程序的功能时,会非常耗时。启动另一个应用/目标/命令/脚本将要求您至少更改程序包。yaml、生成新程序包、停用当前应用程序、使用新程序包升级、重新激活应用程序并启动它。
IOX应用终止的基本信息
Local Manager和IOX客户端没有提供有关应用/容器/VM停止的原因的很多信息。幸运的是,watchDog.log会跟踪此信息,并且还会为您提供应用程序的最后退出/返回代码。虽然这可能并不总是对您有帮助,但在许多情况下,它引导您找到查找的原因。
要使用IOX客户端获取watchDog.log:
[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.
要使用本地管理器获取日志,请执行以下操作:
- 登录到本地管理器。
- 如图所示,点击相关应用的start deactivate manage

- 选择Logs选项卡,如图所示:

- 下载watchDog.log

例如,此应用程序意外终止,您在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
如上面的日志代码片断所示,退出代码为127。这是一个保留的返回代码,这意味着:找不到命令,这表示错误命令被指定为目标或启动的脚本尝试调用错误命令。
最常见的保留退出代码:
| RC |
含义 |
注释 |
| 1 |
Catchall用于一般错误 |
其他错误,例如“除以零”和其他不允许的操作 |
| 2 |
误用外壳组件 |
缺少关键字或命令或权限问题(以及二进制文件比较失败的差异返回代码)。 |
| 126 |
无法执行命令 |
权限问题或命令不是可执行文件 |
| 127 |
找不到命令 |
$PATH或拼写错误可能存在的问题 |
| 128 |
无效的参数退出(RC>255) |
exit仅使用0 - 255范围内的整数参数 |
| 128+n |
致命错误信号“n” |
退出代码返回137(128 + 9)->应用程序错误信号为9 |
| 130 |
按Ctrl+c终止 |
Control-C是致命错误信号2,(130 = 128 + 2,请参阅上文) |
| 255 |
退出状态超出范围(RC>255) |
exit仅使用0 - 255范围内的整数参数 |
有关这方面的更多信息,请访问以下网址:http://tldp.org/LDP/abs/html/exitcodes.html
防止IOX容器在应用/目标终止时停止
上述主题提供有关如何对出现故障的应用程序进行故障排除的信息,但它不会阻止IOX应用程序停止。这意味着与故障排除相关的最可能重要的信息已经消失,因为所有非持久数据都已不存在。
如上所述,另一个使用案例是播放已启动的IOX应用的功能,或者灵活使用命令和参数。
要防止IOX应用程序在应用程序端终止,可以将-debug传递到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]
/ #
在上述示例中,激活并以 — debug on标志开始后,即使应用已终止,您仍可以访问容器。您可以在此处启动其他命令,并可以在运行应用程序的环境中自由地试验应用程序。这样可以节省大量时间,解决应用程序问题或设置正确的目标和参数。