Tendo problemas ao redirecionar a saída do aplicativo para o arquivo de log

1

Eu tenho um dispositivo ARM embarcado executando o Linux, que inicia um aplicativo na inicialização. Esta aplicação tem um monte de declarações "printf(...)" que eu preciso ver. O modo normal como venho me aproximando disso é matar o aplicativo em execução por meio do SSH (de um PC host) no dispositivo incorporado após ele inicializar e, em seguida, reiniciá-lo pelo terminal SSH para que eu possa ver as instruções de impressão no console no PC host. O problema com isso é que o aplicativo não se comporta bem depois de matá-lo e relançá-lo.

O que tentei fazer é editar o script de inicialização para dizer "(nohup ./myAppName 2>&1 | logger) &" e exibir /var/log/syslog com tail -f . No entanto, nada está sendo registrado.

Eu verifiquei que "(nohup echo "test123" 2>&1 | logger) &" de fato log corretamente no syslog.

Onde as coisas podem dar errado? É possível que o aplicativo não esteja imprimindo em stdout / stderr? Quando eu relançar o aplicativo, ele imprime corretamente no console, mas, como eu disse, outras coisas além do escopo disso são quebradas quando eu o faço.

    
por Hubert S. Cumberdale 27.09.2016 / 21:55

1 resposta

1

Algum programa é menos detalhado quando stdout não é um tty. Você pode emular um tty usando a tela:

screen -L -d -m ./myAppName

que registra a saída em algo como ./screenlog.0 . Você precisa de permissão de escrita no diretório atual!

Caso contrário, também é possível que o programa simplesmente falhe silenciosamente apenas dentro de seu ambiente de inicialização.

Eu depuraria isso usando strace e evitando logger :

strace -f -o /tmp/myApp.strace nohup ./myAppName >/tmp/myApp.log 2>&1
    
por 27.09.2016 / 22:28