소개
이 문서에서는 시작하는 동안 문제가 발생하거나 예기치 않게 중지되는 IOX 응용 프로그램을 트러블슈팅하거나 디버깅하는 방법에 대해 설명합니다.
배경 정보
IOX 애플리케이션을 개발할 때 가장 좋은 방법은 다른 플랫폼 및/또는 샌드박스에서 개발하는 것입니다. 원하는 IOX 애플리케이션이 테스트 및 준비되면 IOX 지원 디바이스에 패키지 및 구축할 수 있습니다. 구축이 예상대로 작동하지 않는 경우 애플리케이션이 예기치 않게 중지되거나 시작조차 하지 않을 수 있습니다.
및 IOX VM/컨테이너/애플리케이션의 기본 동작은 target 명령이 종료되는 즉시 중지하는 것입니다. 따라서 영구적이지 않은 모든 정보가 사라지므로 예기치 않은 상황이 발생할 경우 문제를 해결하기 어렵습니다. 또 다른 결과는 IOX 애플리케이션의 기능을 재생/실험하려는 경우 시간이 매우 많이 소요된다는 것입니다. 다른 앱/대상/명령/스크립트를 시작하려면 최소한 package.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입니다. 이는 예약된 반환 코드이며 다음을 의미합니다. command not found - 장애가 있는 명령이 대상으로 지정되었거나 시작된 스크립트가 장애가 있는 명령을 호출하려고 시도함을 나타냅니다.
가장 일반적인 예약된 종료 코드:
| RC |
의미 |
코멘트 |
| 1 |
일반 오류에 대한 카탈로그 |
기타 오류(예: "0으로 나누기" 및 기타 허용되지 않는 작업) |
| 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-application의 기능을 활용하거나 명령 및 인수를 통해 유연하게 대처하는 것입니다.
IOX 응용 프로그램이 응용 프로그램 종료 시 종료되는 것을 방지하려면 activate 명령에 -debug on을 전달할 수 있습니다.
[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 플래그를 활성화하고 시작한 후 애플리케이션이 종료되더라도 컨테이너에 액세스할 수 있습니다. 여기에서 다른 명령을 실행할 수 있으며 응용 프로그램이 실행되는 환경에서 응용 프로그램을 자유롭게 테스트할 수 있습니다. 따라서 애플리케이션 문제를 해결하거나 올바른 대상과 인수를 설정하는 데 많은 시간이 절약됩니다.