Probleme beim Umleiten der Anwendungsausgabe in die Protokolldatei

Probleme beim Umleiten der Anwendungsausgabe in die Protokolldatei

Ich habe ein eingebettetes ARM-Gerät mit Linux, das beim Booten eine Anwendung startet. Diese Anwendung enthält eine Reihe von "printf(...)"Anweisungen, die ich anzeigen muss. Normalerweise gehe ich so vor, dass ich die laufende App nach dem Booten über SSH (von einem Host-PC) auf dem eingebetteten Gerät beende und sie dann über das SSH-Terminal neu starte, damit ich die Druckanweisungen in der Konsole auf dem Host-PC sehen kann. Das Problem dabei ist, dass sich die App nach dem Beenden und Neustarten nicht gut verhält.

Ich habe versucht, das Startskript so zu bearbeiten, dass es Folgendes "(nohup ./myAppName 2>&1 | logger) &"anzeigt : „...“, es wird jedoch nichts protokolliert./var/log/syslogtail -f

Ich habe überprüft, dass "(nohup echo "test123" 2>&1 | logger) &"die Protokollierung im Syslog tatsächlich ordnungsgemäß erfolgt.

Wo könnte etwas schief laufen? Ist es möglich, dass die App nicht auf stdout/stderr druckt? Wenn ich die App neu starte, druckt sie zwar richtig auf der Konsole, aber wie ich schon sagte, gehen andere Dinge, die darüber hinausgehen, kaputt, wenn ich das tue.

Antwort1

Einige Programme sind weniger ausführlich, wenn stdout kein TTY ist. Sie können ein TTY mit screen emulieren:

screen -L -d -m ./myAppName

Dadurch wird die Ausgabe in etwa wie folgt protokolliert ./screenlog.0. Sie benötigen Schreibberechtigung im aktuellen Verzeichnis!

Andernfalls ist es auch möglich, dass das Programm nur in Ihrer Boot-Umgebung stillschweigend abstürzt.

Ich würde das debuggen, indem ich Folgendes verwende straceund vermeide logger:

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

verwandte Informationen