我有一个运行 Linux 的嵌入式 ARM 设备,它在启动时启动一个应用程序。该应用程序中有一堆"printf(...)"
我需要查看的语句。我处理此问题的正常方法是在嵌入式设备启动后通过 SSH(从主机 PC)终止正在运行的应用程序,然后通过 SSH 终端重新启动它,以便我可以在主机 PC 上的控制台。这样做的问题是应用程序在终止并重新启动后表现不佳。
我试图做的是编辑启动脚本以使用.. 来表示"(nohup ./myAppName 2>&1 | logger) &"
和查看,但是没有记录任何内容。/var/log/syslog
tail -f
我已经验证确实"(nohup echo "test123" 2>&1 | logger) &"
可以正确记录到系统日志中。
哪里可能出了问题?该应用程序是否有可能未打印到 stdout/stderr?当我重新启动应用程序时,它确实会正确打印到控制台,但正如我所说,当我这样做时,超出此范围的其他内容都会被破坏。
答案1
当 stdout 不是 tty 时,某些程序会更简洁。您可以使用 screen 模拟 tty:
screen -L -d -m ./myAppName
它将输出记录为类似./screenlog.0
.您需要当前目录的写权限!
否则,程序也可能仅在您的引导环境中默默地失败。
我会使用strace
并避免调试logger
:
strace -f -o /tmp/myApp.strace nohup ./myAppName >/tmp/myApp.log 2>&1