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

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

Eu tenho um dispositivo ARM incorporado rodando Linux que inicia um aplicativo na inicialização. Este aplicativo contém várias "printf(...)"instruções que preciso visualizar. A maneira normal de abordar isso é encerrar o aplicativo em execução por meio de SSH (de um PC host) no dispositivo incorporado após a inicialização e, em seguida, reiniciá-lo por meio do 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 encerrá-lo e reiniciá-lo.

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

Eu verifiquei que isso "(nohup echo "test123" 2>&1 | logger) &"realmente faz login corretamente no syslog.

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

Responder1

Alguns programas são menos detalhados quando stdout não é um tty. Você pode emular um tty usando screen:

screen -L -d -m ./myAppName

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

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

Eu depuraria isso usando stracee evitando logger:

strace -f -o /tmp/myApp.strace nohup ./myAppName >/tmp/myApp.log 2>&1

informação relacionada