Einführung
In diesem Dokument wird beschrieben, wie Sie IOX-Anwendungen, bei denen Probleme beim Einstieg auftreten oder unerwartet beendet werden, beheben oder debuggen können.
Hintergrundinformationen
Wenn Sie IOX-Anwendungen entwickeln, ist es am besten, diese auf einer anderen Plattform und/oder Sandbox zu entwickeln. Sobald die gewünschte IOX-Anwendung getestet und bereit ist, kann sie auf einem IOX-fähigen Gerät verpackt und bereitgestellt werden. In einigen Fällen funktioniert diese Bereitstellung nicht wie erwartet, die Anwendung kann unerwartet beendet werden oder sogar nicht starten.
Das Standardverhalten für und IOX VM/Container/Anwendung wird beendet, sobald der Zielbefehl beendet ist. Dies erschwert die Fehlerbehebung, wenn etwas Unerwartetes passiert, da alle nicht persistenten Informationen verschwinden. Eine weitere Folge ist, dass es sehr zeitaufwendig ist, wenn Sie die Funktionen von IOX-Anwendungen wiedergeben bzw. testen möchten. Wenn Sie eine andere App/ein anderes Ziel/einen anderen Befehl/ein anderes Skript starten, müssen Sie zumindest die Datei package.yaml ändern, das neue Paket erstellen, Ihre aktuelle Anwendung deaktivieren, mit dem neuen Paket aktualisieren, die Anwendung erneut aktivieren und starten.
Grundlegende Informationen zur IOX-Anwendungsbeendigung
Local Manager und IOX-Client liefern nicht viele Informationen darüber, warum Anwendungen/Container/VMs gestoppt wurden. Glücklicherweise verfolgt watchDog.log dies und stellt Ihnen den letzten Exit/Return-Code der Anwendung zur Verfügung. Auch wenn Ihnen das nicht immer hilft, führt es in vielen Fällen dazu, dass Sie suchen.
So rufen Sie das watchDog.log mit dem IOX-Client ab:
[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.
So rufen Sie das Protokoll mit dem lokalen Manager ab:
- Melden Sie sich bei Local Manager an.
- Wie im Bild gezeigt, klicken Sie auf Start Deaktivieren verwalten für die entsprechende Anwendung
- Wählen Sie die Registerkarte Protokolle, wie im Bild gezeigt:
- Laden Sie watchDog.log herunter
Beispielsweise wird diese Anwendung unerwartet beendet, und Sie sehen dies in 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
Wie Sie im obigen Protokollausschnitt sehen können, war der Exitcode 127. Dies ist ein reservierter Rückgabecode und bedeutet: nicht gefunden, was darauf hinweist, dass ein fehlerhafter Befehl als Ziel angegeben wird oder das Skript, das gestartet wird, versucht, einen fehlerhaften Befehl aufzurufen.
Häufigste reservierte Exitcodes:
RC |
Bedeutung |
Kommentar |
1 |
Catchall für allgemeine Fehler |
Verschiedene Fehler wie "durch Null teilen" und andere unzulässige Vorgänge |
2 |
Missbrauch von Shell Builts |
Fehlendes Schlüsselwort oder fehlender Befehl oder Berechtigungsproblem (und fehlender Rückgabecode bei einem fehlgeschlagenen Binärdateivergleich). |
126 |
Befehl konnte nicht ausgeführt werden |
Berechtigungsproblem oder Befehl ist keine ausführbare Datei |
127 |
Befehl nicht gefunden |
Mögliches Problem mit $PATH oder einem Tippfehler |
128 |
Ungültiges Argument zum Beenden (RC>255) |
exit nimmt nur ganzzahlige Zeichen im Bereich 0-255 ein. |
128+n |
Schwerwiegendes Fehlersignal "n" |
Exitcode gibt 137 (128 + 9) zurück -> Anwendungsfehler-Signal war 9 |
130 |
Beendet durch Strg+c |
Control-C ist ein tödliches Fehlersignal 2, (130 = 128 + 2, siehe oben) |
255 |
Exit-Status außerhalb des Bereichs (RC>255) |
exit nimmt nur ganzzahlige Zeichen im Bereich 0-255 ein. |
Weitere Informationen hierzu finden Sie hier: http://tldp.org/LDP/abs/html/exitcodes.html
Verhindern, dass IOX-Container die Beendigung von Anwendungen/Zielterminierungen beenden
Das obige Thema enthält Informationen zum Beheben von Fehlern bei Anwendungen, verhindert jedoch nicht, dass die IOX-Anwendung beendet wird. Dies bedeutet, dass die wahrscheinlich wertvollsten Informationen zur Fehlerbehebung verschwunden sind, da alle nicht persistenten Daten nicht mehr vorhanden sind.
Wie bereits erwähnt, ist ein weiterer Anwendungsfall die Nutzung der Funktionen der startenden IOX-Anwendung oder die Flexibilität bei Befehlen und Argumenten.
Um zu verhindern, dass IOX-Anwendungen am Anwendungsende beendet werden, können Sie das -Debuggen an den Befehl enable übergeben:
[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]
/ #
Im obigen Beispiel können Sie nach dem Aktivieren und Beginnen des -debug on-Flags auf den Container zugreifen, selbst wenn die Anwendung beendet wird. Sie können hier andere Befehle starten und frei mit der Anwendung in der Umgebung experimentieren, in der die Anwendung ausgeführt wird. Dies spart viel Zeit bei der Behebung von Anwendungsproblemen oder beim Einstellen der richtigen Ziele und Argumente.