Introduzione
In questo documento viene descritto come risolvere i problemi o eseguire il debug delle applicazioni IOX in cui si verificano problemi durante l'avvio o arresti imprevisti.
Premesse
Quando si sviluppano applicazioni IOX, l'approccio migliore è quello di svilupparle su un'altra piattaforma e/o sandbox. Una volta testata e pronta, l'applicazione IOX desiderata può essere assemblata e distribuita su un dispositivo abilitato per IOX. In alcuni casi, la distribuzione non funziona come previsto, l'applicazione potrebbe arrestarsi in modo imprevisto o non avviarsi.
Per impostazione predefinita, il comportamento di e IOX VM/container/application viene interrotto non appena il comando target viene terminato. Ciò rende difficile la risoluzione dei problemi in caso di eventi imprevisti, in quanto tutte le informazioni non persistenti scompariranno. Un'altra conseguenza è che l'esecuzione/sperimentazione delle funzionalità delle applicazioni IOX richiede molto tempo. Per avviare un'altra app/destinazione/comando/script è necessario almeno modificare il pacchetto.yaml, compilare il nuovo pacchetto, disattivare l'applicazione corrente, eseguire l'aggiornamento con il nuovo pacchetto, riattivare l'applicazione e avviarla.
Informazioni di base sulla terminazione delle applicazioni IOX
Local Manager e il client IOX non forniscono molte informazioni sul motivo per cui le applicazioni/contenitori/macchine virtuali sono state arrestate. Fortunatamente, il file watchDog.log tiene traccia di questo e fornisce anche l'ultimo codice di uscita/ritorno dell'applicazione. Anche se questo potrebbe non sempre aiutarti, in molti casi ti porta al motivo che stai cercando.
Per recuperare il file watchDog.log con il client 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.
Per recuperare il log mediante Gestione locale:
- Accedere a Gestione locale.
- Come mostrato nell'immagine, fare clic su start deactivate manage (disattiva la gestione per l'applicazione in questione)
- Selezionare la scheda Log, come mostrato nell'immagine:
- Scaricare il file watchDog.log
Questa applicazione, ad esempio, viene terminata in modo imprevisto e ciò viene visualizzato nel file 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
Come si può vedere nel frammento di log sopra riportato, il codice di uscita è 127. Questo è un codice restituito riservato e significa: comando non trovato, il che indica che un comando errato è specificato come destinazione o che lo script avviato tenta di chiamare un comando errato.
Codici di uscita riservati più comuni:
RC |
Significato |
Commento |
1 |
Catchall per errori generali |
Errori vari, ad esempio "divisione per zero" e altre operazioni non consentite |
2 |
Uso improprio di shell builtins |
Parola chiave o comando mancante oppure problema di autorizzazione (e codice di restituzione diff in un confronto di file binari non riuscito). |
126 |
Impossibile eseguire il comando |
Il comando o il problema di autorizzazione non è eseguibile |
127 |
Comando non trovato |
Possibile problema con $PATH o un errore di battitura |
128 |
Argomento non valido per uscire (RC>255) |
exit accetta solo argomenti di tipo integer compresi nell'intervallo da 0 a 255 |
128+n |
Segnale di errore irreversibile "n" |
il codice di uscita restituisce 137 (128 + 9) -> il segnale di errore dell'app è stato 9 |
130 |
Terminato da Ctrl+c |
Control-C è il segnale di errore irreversibile 2, (130 = 128 + 2, vedere sopra) |
255 |
Stato uscita non compreso nell'intervallo (RC>255) |
exit accetta solo argomenti di tipo integer compresi nell'intervallo da 0 a 255 |
Ulteriori informazioni al riguardo sono disponibili all'indirizzo: http://tldp.org/LDP/abs/html/exitcodes.html
Impedire l'arresto dei contenitori IOX alla terminazione dell'applicazione o della destinazione
Nell'argomento precedente vengono fornite informazioni su come risolvere i problemi relativi a un'applicazione in errore, ma non viene impedito l'arresto dell'applicazione IOX. Ciò significa che molto probabilmente le informazioni importanti relative alla risoluzione dei problemi sono scomparse poiché tutti i dati non persistenti non esistono più.
Come accennato in precedenza, un altro caso di utilizzo è quello di giocare con le funzionalità dell'applicazione IOX avviata o essere flessibile con comandi e argomenti.
Per evitare che le applicazioni IOX vengano terminate all'estremità dell'applicazione, passare il 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]
/ #
Nell'esempio precedente, dopo l'attivazione e l'avvio con il flag -debug on, è possibile accedere al contenitore anche se l'applicazione viene terminata. È possibile avviare altri comandi e sperimentare liberamente l'applicazione nell'ambiente in cui viene eseguita. Ciò consente di risparmiare molto tempo nella risoluzione dei problemi dell'applicazione o nell'impostazione della destinazione e degli argomenti corretti.