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