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/syslog
com 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 strace
e evitando logger
:
strace -f -o /tmp/myApp.strace nohup ./myAppName >/tmp/myApp.log 2>&1